Caution

お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。

  1. トップページ
  2. Bash辞典
  3. シェバン(shebang)/ chmod +x

シェバン(shebang)/ chmod +x

シェバン(shebang)はスクリプトファイルの1行目に書く特別なコメントで、どのインタプリタで実行するかを指定します。『chmod +x』で実行権限を付けることで、スクリプトを直接実行できるようになります。

構文
#!/bin/bash
# ↑ シェバン。このスクリプトを /bin/bash で実行することを宣言する

#!/usr/bin/env bash
# ↑ env 経由で bash を探す(パス依存を避けた移植性の高い書き方)

# スクリプトに実行権限を付与
chmod +x スクリプトファイル名

# 直接実行(シェバンが必要)
./スクリプトファイル名

# bash コマンドで実行(シェバン・実行権限不要)
bash スクリプトファイル名
主なシェバン一覧
シェバン概要
#!/bin/bashBash シェルで実行します。最も一般的な書き方です。
#!/usr/bin/env bashPATH から bash を探して実行します。macOS や nvm 環境で推奨されます。
#!/bin/shPOSIX 準拠のシェルで実行します。移植性最優先のスクリプトに使います。
#!/usr/bin/env python3Python 3 で実行します。
#!/usr/bin/env nodeNode.js で実行します。
#!/usr/bin/env phpPHP で実行します。
chmod +x ファイルすべてのユーザーに実行権限を付与します。
chmod 755 ファイル所有者に rwx、グループ・他ユーザーに r-x を付与します。
chmod 700 ファイル所有者のみに実行権限を付与します(他ユーザーは実行不可)。
サンプルコード

以下の内容で『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 スクリプト名 のように明示的にインタプリタを指定すれば実行権限なしでも動作します。スクリプト内での変数・引数の扱いは 特殊変数 も参照してください。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。