本文へスキップ
BecomeCoder

シェルスクリプトコース · 第1章 はじめてのシェルスクリプト · レッスン3

シバンと実行権限 ― ./script.sh で動かす

ブラウザで完結

導入

現場のスクリプトは sh script.sh ではなく ./script.sh と打って動かすことが多いです。この形にするには、1行目のシバン実行権限という2つの準備が要ります。ここでつまずく初心者は本当に多いので、丁寧にいきましょう。

説明

スクリプトの1行目にある #!/bin/bashシバン(shebang) と呼びます。「このファイルは /bin/bash に読ませて動かしてください」という、OSへの指示書きです。

#!/bin/bash

echo "シバンつきのスクリプトです"
  • #!/bin/bash … bash の機能(配列[[ ]] など)を使うとき
  • #!/bin/sh … どの環境でも動く最小限の書き方に留めるとき

シバンは # で始まるのでコメントに見えますが、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 で見ると rwxx が付いたことが分かります。

sh script.sh なら権限がなくても動くのに、./script.sh は権限が要る——この違いは「誰がファイルを開くか」です。前者は sh というプログラムが読むだけ、後者はファイル自身をプログラムとして起動しています。

やってみよう

まず ./script.sh と打って、わざとエラーを見てください(許可がありません)。次に chmod +x script.sh を実行し、ls -l script.shx が付いたことを確認してから、もう一度 ./script.sh。今度は動きます。この3ステップは、これから何百回も使う型です。

演習

script.sh に実行権限を付けて、./script.sh の形で実行してください。

ヒント1を見る

実行権限を付けるのは chmod +x ファイル名 です。

ヒント2を見る

chmod +x script.sh のあと ./script.sh

実際に動かしてみよう

本文のサンプルや演習のコードは、コードブロック右上の「コピー」ボタンでコピーして、下のエディタに貼り付ければそのまま実行できます。

シェルスクリプト(シミュレート)

スクリプトを書くエディタと、それを動かす仮想シェルを読み込みます(本物のbashではなく、動きを再現した学習用の環境です)。
スクロールして表示された時点でも自動で読み込まれます。