言語
日本語
English

Caution

お使いのブラウザはJavaScriptが無効になっております。
当サイトでは検索などの処理にJavaScriptを使用しています。
より快適にご利用頂くため、JavaScriptを有効にしたうえで当サイトを閲覧することをお勧めいたします。

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

シェバン(shebang)/ chmod +x

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

構文

シェバン。このスクリプトを /bin/bash で実行することを宣言します。

#!/bin/bash

env 経由で bash を探します(パス依存を避けた移植性の高い書き方)。

#!/usr/bin/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』を作成します。

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

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