Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

sh(エスエイチ)とは | 意味や読み方など丁寧でわかりやすい用語解説

sh(エスエイチ)の意味や読み方など、初心者にもわかりやすいように丁寧に解説しています。

作成日: 更新日:

読み方

日本語表記

シェル (シェル)

英語表記

sh (エスエイチ)

用語解説

「sh」は、Unix系オペレーティングシステムにおいて広く利用されるコマンドラインシェルの一種であり、その名前は「シェル(Shell)」を短縮したものである。シェルとは、ユーザーがオペレーティングシステムのカーネルと対話するためのインターフェースを提供するプログラムであり、キーボードからの入力(コマンド)を受け取り、それを解釈してシステムに実行させる役割を担う。具体的には、ユーザーが入力したコマンドを実行したり、スクリプト言語としてプログラムを作成・実行したりする機能を提供する。

shは、特に「Bourne Shell(ボーンシェル)」として知られ、1970年代後半にスティーブン・ボーンによって開発された。このシェルは、その堅牢性とシンプルさから、当時のUnixシステムの標準シェルとして広く採用され、現在の多くのUnix系システムにおいて「/bin/sh」というパスで提供されている。かつては独自の実行ファイルとして存在していたが、現代の多くのシステムでは、より高機能な後継シェル(例えばBashやDashなど)がPOSIX標準に準拠した動作モードで動作する際のエイリアス、あるいはシンボリックリンクとして「sh」が提供されることが一般的である。これは、特定のシェルに依存せず、どこでも動作するポータブルなシェルスクリプトを作成するために非常に重要となる。

shの主な機能は多岐にわたる。まず、コマンドの実行機能がある。ユーザーがコマンドラインに入力したコマンドを認識し、そのプログラムを実行する。例えば、「ls」と入力すればファイル一覧を表示し、「cp source_file dest_file」と入力すればファイルをコピーする。これらのコマンドは、shの内部コマンドとして組み込まれているものもあれば、外部の実行ファイル(/binや/usr/binなどに格納されているプログラム)を呼び出すものもある。

次に、入出力のリダイレクト機能が挙げられる。これは、コマンドの標準入力、標準出力、標準エラー出力をファイルや他のコマンドに切り替える機能である。例えば、「ls > filelist.txt」と入力すれば、「ls」コマンドの出力結果が画面ではなく「filelist.txt」というファイルに保存される。逆に、「sort < unsorted.txt」と入力すれば、「sort」コマンドの入力が「unsorted.txt」ファイルから読み込まれる。エラーメッセージだけをファイルに保存したい場合は、「2> error.log」のように標準エラー出力(ファイルディスクリプタ2)をリダイレクトする。

さらに、パイプ(|)機能もshの重要な特徴である。これは、あるコマンドの標準出力を別のコマンドの標準入力に直接つなげる機能である。例えば、「ls -l | grep .txt」と入力すれば、「ls -l」コマンドの出力結果が、今度は「grep .txt」コマンドの入力となり、最終的にファイル名に「.txt」が含まれる行だけが抽出されて表示される。これにより、複数のシンプルなコマンドを組み合わせて複雑な処理を効率的に実行できる。

環境変数の利用もshの重要な要素である。環境変数は、シェルやその子プロセスが参照できるグローバルな設定値を提供する。例えば、「PATH」環境変数には、コマンドを探すディレクトリのリストが設定されており、これによりユーザーはコマンドのフルパスを指定せずに実行できる。また、「HOME」環境変数にはユーザーのホームディレクトリのパスが格納されている。「export」コマンドを使用することで、シェルスクリプト内で定義した変数を子プロセスに引き継がせることが可能になる。

shは単なるコマンド実行環境に留まらず、簡易的なプログラミング言語、すなわちシェルスクリプト言語としても非常に強力である。ユーザーは一連のコマンドをテキストファイルに記述し、それをシェルスクリプトとして実行できる。これにより、日常的な繰り返し作業やシステム管理タスクを自動化することが可能になる。シェルスクリプトの先頭には「#! /bin/sh」のような「シバン」または「shebang」と呼ばれる行を記述するのが一般的で、これはこのスクリプトを実行するインタープリタがshであることをシステムに伝える役割を果たす。

スクリプト内では、変数を定義して値を格納したり(例: name="John")、条件分岐 (if ... then ... else ... ficase ... esac) を使って特定の条件に基づいて異なる処理を実行したりできる。また、繰り返し処理 (for ... do ... donewhile ... do ... done) を使って、ファイルのリストを順に処理したり、特定の条件が満たされるまで処理を繰り返したりすることも可能である。これらの制御構造を組み合わせることで、非常に複雑なロジックを持つスクリプトも作成できる。

システムエンジニアを目指す初心者にとって、shを理解することは極めて重要である。現代ではより高機能なBash(Bourne-Again SHell)やZsh(Z Shell)などが主流となっているが、これらのシェルもBourne Shellの基本的な文法や思想を受け継いでいるため、shの基礎を学ぶことは他のシェルを習得する上での強固な土台となる。さらに、システムによっては、最小限の環境で動作させるために、あるいはPOSIX準拠のスクリプトとして最大限の移植性を確保するために、あえてshの文法でスクリプトを作成することが求められる場合も少なくない。トラブルシューティングの際など、システムが限られた機能しか提供できない状況でも、shの知識があれば基本的な操作や診断が可能となるため、その学習価値は非常に高いと言える。OSの仕組みやコマンドライン操作の基礎を深く理解するためにも、shの学習は不可欠である。

関連コンテンツ

関連ITニュース

関連プログラミング言語