シェバン(shebang)/ chmod +x
シェバン(shebang)はスクリプトファイルの1行目に書く特別なコメントで、どのインタプリタで実行するかを指定します。『chmod +x』で実行権限を付けることで、スクリプトを直接実行できるようになります。
構文
シェバン。このスクリプトを /bin/bash で実行することを宣言します。
#!/bin/bash
env 経由で bash を探します(パス依存を避けた移植性の高い書き方)。
#!/usr/bin/env bash
スクリプトに実行権限を付与します。
chmod +x スクリプトファイル名
直接実行します(シェバンが必要です)。
./スクリプトファイル名
bash コマンドで実行します(シェバン・実行権限不要です)。
bash スクリプトファイル名
主なシェバン一覧
| シェバン | 概要 |
|---|---|
| #!/bin/bash | Bash シェルで実行します。最も一般的な書き方です。 |
| #!/usr/bin/env bash | PATH から bash を探して実行します。macOS や nvm 環境で推奨されます。 |
| #!/bin/sh | POSIX 準拠のシェルで実行します。移植性最優先のスクリプトに使います。 |
| #!/usr/bin/env python3 | Python 3 で実行します。 |
| #!/usr/bin/env node | Node.js で実行します。 |
| #!/usr/bin/env php | PHP で実行します。 |
| chmod +x ファイル | すべてのユーザーに実行権限を付与します。 |
| chmod 755 ファイル | 所有者に rwx、グループ・他ユーザーに r-x を付与します。 |
| chmod 700 ファイル | 所有者のみに実行権限を付与します(他ユーザーは実行不可)。 |
サンプルコード
以下の内容で『hello.sh』を作成します。
hello.sh
#!/usr/bin/env bash
# hello.sh — 基本的なシェルスクリプトの雛形
echo "スクリプト名: $0"
echo "引数の数: $#"
echo "すべての引数: $@"
if [ $# -eq 0 ]; then
echo "使い方: $0 名前" >&2
exit 1
fi
echo "こんにちは、$1 さん!"
スクリプトに実行権限を付与します。
chmod +x hello.sh
パーミッションを確認すると、『x』(実行権限)が付いていることがわかります。
ls -l hello.sh -rwxr-xr-x 1 user user 42 Mar 6 12:00 hello.sh
シェバンと実行権限があるので、『./』を付けて直接実行できます。
./hello.sh Alice スクリプト名: ./hello.sh 引数の数: 1 すべての引数: Alice こんにちは、Alice さん!
『bash』コマンドで実行する場合は、実行権限もシェバンも不要です。
bash hello.sh Bob スクリプト名: hello.sh 引数の数: 1 すべての引数: Bob こんにちは、Bob さん!
概要
シェバンは必ずファイルの1行目に書く必要があります。空行や BOM(バイトオーダーマーク)があると無効になります。環境依存を避けるには『#!/usr/bin/env bash』の形式が推奨されます。
『$ chmod +x』は「実行可能ファイルとして設定する」操作です。『./』を付けて実行するには実行権限が必要ですが、『$ bash スクリプト名』のように明示的にインタプリタを指定すれば実行権限なしでも動作します。スクリプト内での変数・引数の扱いは 特殊変数 も参照してください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。