
Unixシェルは、 Unix ライクなオペレーティングシステムにコマンドラインユーザー インターフェイスを提供するシェルです。Unix シェルは、対話的に使用することも、シェル スクリプトを作成するために使用することもできるコマンド 言語を提供します。[ 2 ] ユーザーは通常、ターミナル エミュレータを介して Unix シェル内で作業しますが、シリアル ハードウェア接続またはSecure Shellを介して直接アクセスすることは、サーバー システムでは一般的です。Unix シェルの使用は一部のユーザーに人気がありますが、他のユーザーは、コマンドライン インターフェイス (CLI) の代わりに、デスクトップLinux ディストリビューションやmacOSで提供されているようなウィンドウ システムでグラフィカル シェルを使用することを好みます。
ユーザーは複数のUnixシェルにアクセスできる場合があり、そのうちの1つはユーザーが対話的にログインした際にデフォルトで実行されるように設定されています。デフォルトの選択は通常、ユーザープロファイル(例えば、ローカルのpasswdファイル、またはNISやLDAPなどの分散構成システム)に保存されます。ユーザーは、デフォルトシェル内にネストされた他のシェルを使用することもできます。
Unixシェルは、変数定義と置換、コマンド置換、ファイル名のワイルドカード、ストリームパイプ、制御フロー構造(条件テストと反復)、作業ディレクトリコンテキスト、ヒアドキュメントなど、多くの機能を提供する可能性があります。
最初のUnixシェルは、ベル研究所のケン・トンプソンによって開発され、1971年から1975年にかけてUnixバージョン1から6に同梱されたトンプソンシェル(sh )でした。 [ 3 ]現代の基準からすると初歩的なものでしたが、パイプ処理、` --`と`--`を使ったシンプルな制御構造、ファイル名のGLOBなど、後のすべてのUnixシェルに共通する多くの基本機能を導入しました。ifgotobing。現在では使用されていませんが、 Version 6 Unixなどの一部の古い UNIXシステムの一部としてまだ利用可能です。
これは、1965 年にアメリカのソフトウェア エンジニア、グレンダ シュローダーによって開発されたMulticsシェルをモデルにしています。シュローダーの Multics シェル自体は、ルイ プーザンがMultics チームに見せたRUNCOMプログラムを基にしています。一部の Unix 設定ファイル (たとえば ".bashrc" や ".vimrc") の "rc" サフィックスは、Unix シェルの RUNCOM の祖先の名残です。[ 1 ] [ 4 ]
PWBシェル、またはマッシーシェル(sh )は、1975年から1977年頃にプログラマーズ・ワークベンチUNIXに同梱され、ジョン・マッシーらが改良したトンプソンシェルの上位互換バージョンでした。特に大規模な共有コンピューティングセンターにおいて、シェルプログラミングを実用的にすることに重点を置いていました。シェル変数(環境変数の前身であり、$PATHへと発展した検索パス機構を含む)、ユーザー実行可能なシェルスクリプト、割り込み処理などが追加されました。制御構造はif/gotoからif/then/else/endif、switch/breaksw/endsw、while/end/break/continueへと拡張されました。シェルプログラミングが普及するにつれて、これらの外部コマンドはパフォーマンス向上のためシェル自体に組み込まれていきました。
しかし、初期のUnixシェルの中で最も広く普及し、影響力があったのはBourneシェルとCシェルでした。これらのシェルは、拡張された機能セットを持つ多くの派生シェルや類似シェルのコーディングベースおよびモデルとして使用されました。[ 5 ]
Bourneシェル(sh )は、ベル研究所のStephen Bourneによって開発された新しいUnixシェルです。[ 6 ] 1979年にUNIXバージョン7のシェルとして配布され、後続のすべてのUnixシェルに共通すると考えられる基本的な機能の残りの部分を導入しました。これには、ここでドキュメント、コマンド置換、より汎用的な変数、より広範な組み込み制御構造などが含まれます。ブロックの終了を示すために逆キーワードを使用するなど、言語はALGOL 68の影響を受けています。[ 7 ] 従来、Bourneシェルのプログラム名はshで、Unixファイルシステム階層でのパスは/bin/shです。しかし、さまざまな改良と追加機能を備えた互換性のある同様のプログラムも多数あります。多くのシステムでは、shはこれらの代替プログラムのいずれかへのシンボリックリンクまたはハードリンクになっている場合があります。
POSIX規格では、標準シェルとしてKornシェルの厳密なサブセットが規定されています。ユーザーの視点から見ると、Bourneシェルは、デフォルトのコマンドラインプロンプト文字であるドル記号($)によって、アクティブになったことがすぐに認識されました。
Cシェルであるcshは、制御構造や式文法を含め、 Cプログラミング言語をモデルにしている。カリフォルニア大学バークレー校の大学院生だったビル・ジョイによって書かれ、BSD Unixとともに広く配布された。[ 9 ]
C シェルは、履歴や編集メカニズム、エイリアス、ディレクトリスタック、チルダ表記、cdpath、ジョブ制御、パスハッシュなど、対話型作業のための多くの機能も導入しました。多くのシステムでは、csh は、Joy のオリジナル版を改良したTENEX C シェル(tcsh)へのシンボリックリンクまたはハードリンクになっている場合があります。csh の対話型機能は他のほとんどのシェルにコピーされていますが、言語構造は広くコピーされていません。唯一類似しているのは、Nicole Hamilton によって書かれたHamilton C シェルで、1988 年にOS/2で初めて配布され、 1992 年以降はWindowsで配布されています。 [ 10 ]
シェルはさまざまな状況で設定ファイルを読み込みます。これらのファイルには通常、シェルのコマンドが含まれており、ロードされると実行されます。通常、$PATHなどの実行可能ファイルを見つけるために使用される重要な変数や、シェルの動作や外観を制御するその他の変数を設定するために使用されます。このセクションの表は、よく使用されるシェルの設定ファイルを示しています。[ 11 ]
説明:
BourneシェルやCシェルに由来しないUnixシェル概念のバリエーションには、次のものがある。[ 15 ]
新しいスクリプト言語を発明する代わりに、Bourne シェルを修正し、必要に応じて組み込みコマンドを追加することで、フォーム入力システムを構築しました。