Sh と Bash の違い

Fumbani Banda 2023年1月30日
  1. シェルとは何ですか
  2. 現在のシェルを見つける方法
  3. 利用可能なシェルを見つける方法
  4. sh コマンドとその使用
  5. Bash とその使用
Sh と Bash の違い

このチュートリアルでは、シェルとは何か、現在使用されているシェルを知っていること、使用可能なすべてのシェルのリストを確認すること、および shbash の違いについて説明します。

シェルとは何ですか

シェルは、コマンドを受け取るコンピュータプログラムです。また、コマンドを解釈し、処理のためにオペレーティングシステムに渡します。これは、ユーザーとオペレーティングシステム間のインターフェイスとして機能し、ユーザーがオペレーティングシステムと対話できるようにします。

ほとんどの Linux オペレーティングシステムには、少なくとも 1つのシェルプログラムが付属しています。シェルプログラムは、BashDash、またはその両方になります。

現在のシェルを見つける方法

Linux システムで現在使用されているシェルを知るために、ユーザーアカウント情報が格納されている/etc/passwd ファイルを読み取ることができます。以下のコマンドを実行して、現在のシェルを確認しましょう。

grep コマンドは、指定されたファイル内の文字列を検索するために使用されます。以下のコマンドは、/etc にある passwd ファイルでユーザーfumba を検索します。grep コマンドが一致するものを見つけると、結果を含む行を出力します。

$ grep fumba /etc/passwd

W は、以下の出力から、ユーザーfumba のデフォルトのシェルが bash であることがわかります。

fumba:x:1000:1000:,,,:/home/fumba:/bin/bash

利用可能なシェルを見つける方法

Linux システムで使用可能なすべてのシェルは、/etc/shells ファイルにリストされています。以下の cat コマンドを使用して、/etc/shells ファイルの内容を表示します。

cat /etc/shells

以下の出力は、システムで使用可能なすべてのシェルのリストを示しています。

# /etc/shells: valid login shells
/bin/sh
/bin/bash
/usr/bin/bash
/bin/rbash
/usr/bin/rbash
/bin/dash
/usr/bin/dash
/usr/bin/tmux
/usr/bin/screen

sh コマンドとその使用

sh は Bourne シェルのコマンド名です。これは、Unix ライクなオペレーティングシステム用の標準のコマンド言語インタプリタです。コマンドライン文字列、標準入力、または指定されたファイルからコマンドを実行します。sh は POSIX 標準に準拠しています。

Portable Operating System Interface(POSIX)は、オペレーティングシステム間の互換性を維持するために IEEE ComputerSociety によって指定された標準のファミリです。これらの標準は、標準に準拠した後、複数のオペレーティングシステム用のクロスプラットフォームソフトウェアの開発に役立ちます。

ほとんどのシステムには/bin/sh ファイルがありますが、これはシンボリックリンクであり、sh を呼び出しません。Ubuntu では、/bin/shDash シェルへのシンボリックリンクです。以下のコマンドを実行して確認できます。

$ file -h /bin/sh

以下の出力は、/bin/shdash へのシンボリックリンクであることを示しています。

/bin/sh: symbolic link to dash

スクリプトに #!/bin/sh を追加しましょう。

#!/bin/sh

printf "sh points to dash!\n"

上記のスクリプトは、インタプリタとして/bin/sh を指定しています。ただし、/bin/shdash を指しているため、dash シェルはスクリプトをインタープリターとして実行します。

Bash とその使用

BashBourne Again Shell の略です。sh のように、それはコマンド言語プロセッサとシェルです。ただし、bash は sh のスーパーセットです。sh の機能をサポートし、より多くの拡張機能と機能を提供します。Bash は、Linux オペレーティングシステムのデフォルトのシェルです。

当初、Bash は POSIX 標準に準拠していましたが、機能や拡張機能が追加されるにつれて、POSIX 標準に準拠しなくなりました。ただし、以下に示すように、-posix フラグを設定することにより、bash を POSIX モードで引き続き使用できます。

$ bash --posix

POSIX 標準に準拠する bash スクリプトを書いてみましょう。

#!/bin/bash

set -o posix
printf "we are using bash shell!\n"

bash インタープリターは、最初の行 #!/bin/bash で指定されているため、上記のスクリプトを実行します。

set コマンドは、スクリプトのオプションを有効にします。この場合、bash シェルがスクリプトを POSIX モードで実行できるようにします。

著者: Fumbani Banda
Fumbani Banda avatar Fumbani Banda avatar

Fumbani is a tech enthusiast. He enjoys writing on Linux and Python as well as contributing to open-source projects.

LinkedIn GitHub

関連記事 - Linux Shell