はじめに
#!/bin/bash
は シバン(Shebang) と呼ばれる記述で、スクリプトの冒頭に記述します。
この記述には、スクリプトを実行する際に使用するインタプリタを指定するという重要な役割があります。
普段、ちょっとした作業を効率的に自動化するためにシェルスクリプトを活用しています。
この記事は個人レベルの備忘録としてまとめたものですが、どなたかの技術の支えになれば幸いです。
書こうと思ったきっかけ
いつもスクリプトの冒頭に書いている #!/bin/bash
について、「なぜこれを記述しているのか」を自分で言語化できていないと感じたため、記事として整理することにしました。
実はこの記述について、特に誰かに教わったわけではなく、「なんとなくのおまじない」として使っていることが多かったのです。
そこで、改めてその意味を調べ、まとめておこうと思いました。
記事の中では、簡単なシェルスクリプトを実行する例を交えながら、#!/bin/bash の役割について解説していきます。
#!/bin/bash
とは?
#!/bin/bash
は、スクリプトを実行する際に Bash(Bourne Again Shell) を使用することを指定する記述です。
スクリプト内のコマンドや構文が、指定されたインタプリタ(ここでは Bash)によって解釈され、実行されます。
例:
#!/bin/bash
echo "Hello, World!"
このスクリプトを実行すると、bash
が指定されているため、Bashシェルが使用されてコマンドが解釈されます。
シバンがない場合の動作
シバンがないスクリプトを実行すると、デフォルトのシェル(環境によって異なる場合があります)が使用されます。
これにより、構文の違いによってスクリプトが正常に動作しない可能性があります。
他のインタプリタの例
シバンで指定するプログラムを変更することで、Bash以外のインタプリタを使用することもできます。
POSIX準拠のシェル
標準的なシェルスクリプトで使用されるインタプリタです。
#!/bin/sh
Python
Pythonスクリプトを実行する際に指定します。
#!/usr/bin/env python3
Perl
Perlスクリプトを実行する場合に使用します。
#!/usr/bin/perl
Node.js
Node.jsスクリプトを実行するための指定です。
#!/usr/bin/env node
実行方法
スクリプトを実行する際、以下の手順でシバンで指定されたインタプリタを使用します。
chmod +x script.sh # 実行権限を付与
./script.sh # スクリプトを実行
シバンがない場合、インタプリタを明示的に指定して実行します。
bash script.sh
実際にやってみた
ここでは、冒頭で紹介したシェルスクリプトを作成し、実行してみます。
1. スクリプトを作成する
まず、vi
コマンドでスクリプトファイルを作成します。ここでは hello.sh
という名前にします。
vi hello.sh
vi
の編集モードに入るために、i
キーを押して挿入モードに切り替え、以下の内容を入力します。
#!/bin/bash
echo "Hello, World!"
編集を終了して保存する方法
-
Esc キーを押す
- 挿入モードを終了します。
-
:wq
と入力する- これは「書き込み (保存)」と「終了」を意味します。
-
Enter キーを押す
- コマンドを実行し、編集内容を保存して終了します。
2. 実行権限を付与する
スクリプトに実行権限を付与します。
chmod +x hello.sh
3. スクリプトを実行する
以下のコマンドでスクリプトを実行します。
./hello.sh
結果は以下のように表示されます。
Hello, World!
まとめ
ここまでお読みいただき、ありがとうございました。
今回の内容は基本的なものですが、こうした基礎を丁寧に学ぶことがシェルスクリプトを上達させる近道だと思っています。
今後も基礎的な内容を積極的にアウトプットし、自分の知識を整理しながら振り返っていきます。