シェルスクリプトの拡張子「.sh」と「.bash」の違い

Linux環境で作業をしていると、xxx.sh という名前のシェルスクリプトをよく見かけます。

一方で、配布されているツールやスクリプトの中には、

xxx.bash

のように .bash という拡張子が付いているものもあります。

.sh.bash は何が違うのか?」
.sh なのに中身が #!/bin/bash なのはなぜなのか?」

という疑問を持つことがあります。

.sh はシェルスクリプト全般を表す慣習

まず、.sh という拡張子は sh専用という意味ではありません

Linuxでは昔から、

backup.sh
check_service.sh
monitor.sh

のように、シェルで実行するスクリプトに .sh を付けることが一般的です。

これはあくまで「シェルスクリプトですよ」という識別のためであり、実際にどのシェルで動くかは別の話になります。

実際に使用するシェルを決めるのは先頭行

シェルスクリプトの先頭には、以下のような記述があります。

#!/bin/bash

これは shebang(シバン)と呼ばれ、このスクリプトを実行するインタプリタを指定しています。

例えば、

#!/bin/bash

echo "backup start"

という内容なら、ファイル名が、

backup.sh

であっても、これは Bash 用のスクリプトです。

つまり、

backup.sh

という名前だけでは、sh用なのかbash用なのかは判断できません。

なぜ .sh なのに #!/bin/bash なのか

実際の運用現場では、

backup.sh

という名前で、

#!/bin/bash

から始まるスクリプトはよくあります。

理由は、Bashには sh より便利な機能が多いためです。

例えば、

  • 配列
  • [[ ]] による条件判定
  • 拡張された変数展開
  • source による設定ファイル読み込み

などが利用できます。

そのため、運用スクリプトでは Bash を指定するケースが多くあります。

.bash という拡張子も存在する理由

一方で、

xxx.bash

というファイル名も存在します。

これは「このファイルは Bash 専用です」と、作成者が分かりやすくするために付けている場合が多いです。

例えば、配布されているツールで、

install.bash
setup.bash

のような名前を見ることがあります。

これは利用者に対して、

「このスクリプトは Bash 前提です」

という意図を伝える役割があります。

ただし、.bash だから特別な実行形式になるわけではありません。

例えば、

test.sh
test.bash

どちらでも、中身が、

#!/bin/bash

なら Bash スクリプトです。

実行方法には注意

実行方法によって動作が変わる場合があります。

推奨される実行方法

./backup.sh

または、

bash backup.sh

この場合は Bash で実行されます。

注意が必要な実行方法

sh backup.sh

これは sh を明示的に指定しているため、先頭の

#!/bin/bash

は無視されます。

Bash専用の構文を使っている場合、環境によってはエラーになることがあります。

まとめ

  • .sh はシェルスクリプト全般を表す慣習であり、sh専用ではない
  • .bash は Bash 専用であることを明示するために使われることがある
  • 実際に利用するシェルは shebang(#!/bin/bash など)で決まる
  • 実行時に sh script.sh とすると shebang は無視される
  • ファイル名だけではなく、先頭行と実行方法を確認することが重要

シェルスクリプトを扱う際は、拡張子だけで判断せず、まず #!/bin/~ を確認することがトラブル防止になります。

\ 最新情報をチェック /

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です