導入
現場のスクリプトは sh script.sh ではなく ./script.sh と打って動かすことが多いです。この形にするには、1行目のシバンと実行権限という2つの準備が要ります。ここでつまずく初心者は本当に多いので、丁寧にいきましょう。
説明
スクリプトの1行目にある #!/bin/bash を シバン(shebang) と呼びます。「このファイルは /bin/bash に読ませて動かしてください」という、OSへの指示書きです。
#!/bin/bash
echo "シバンつきのスクリプトです"
シバンは # で始まるのでコメントに見えますが、1行目に限り特別扱いされます。2行目以降の # はただのコメントです。
もう1つが 実行権限 です。ファイルには「読める・書ける・実行できる」の3つの許可があり、作ったばかりのファイルには実行の許可がありません。
flowchart LR
A["script.sh<br/>rw-r--r--(実行できない)"] -->|"chmod +x script.sh"| B["script.sh<br/>rwxr-xr-x(実行できる)"]
B --> C["./script.sh で動く"]
だから、いきなり ./script.sh と打つと怒られます。
./script.sh
→ 許可がありません。ここで chmod +x(change mode の実行フラグを足す)を使います。
chmod +x script.sh
ls -l script.sh
./script.sh
ls -l で見ると rwx の x が付いたことが分かります。
sh script.sh なら権限がなくても動くのに、./script.sh は権限が要る——この違いは「誰がファイルを開くか」です。前者は sh というプログラムが読むだけ、後者はファイル自身をプログラムとして起動しています。
やってみよう
まず ./script.sh と打って、わざとエラーを見てください(許可がありません)。次に chmod +x script.sh を実行し、ls -l script.sh で x が付いたことを確認してから、もう一度 ./script.sh。今度は動きます。この3ステップは、これから何百回も使う型です。
演習
script.sh に実行権限を付けて、./script.sh の形で実行してください。
ヒント1を見る
実行権限を付けるのは chmod +x ファイル名 です。
ヒント2を見る
chmod +x script.sh のあと ./script.sh