
Unixシェルは、 Unixライクなオペレーティングシステムにコマンドラインユーザーインターフェースを提供するシェルです。Unixシェルは、対話的に、またはシェルスクリプトの作成に使用できるコマンド言語を提供します。[2]ユーザーは通常、ターミナルエミュレータを介してUnixシェル内で作業しますが、サーバーシステムでは、シリアルハードウェア接続またはセキュアシェルを介した直接アクセスが一般的です。Unixシェルの使用は一部のユーザーに人気がありますが、コマンドラインインターフェース(CLI)ではなく、 デスクトップLinuxディストリビューションやmacOSで提供されているようなウィンドウシステムのグラフィカルシェルを使用することを好むユーザーもいます。
ユーザーは複数のUnixシェルにアクセスできる場合があります。そのうちの1つは、ユーザーが対話的にログインした際にデフォルトで実行されるように設定されています。デフォルトの選択は通常、ユーザーのプロファイル(例えば、ローカルのpasswdファイル、またはNISやLDAPなどの分散設定システム)に保存されます。ユーザーは、デフォルトシェル内に ネストされた他のシェルを使用することもできます。
Unix シェルは、変数の定義と置換、コマンドの置換、ファイル名のワイルドカード、ストリームのパイプ、制御フロー構造(条件テストと反復)、作業ディレクトリのコンテキスト、ヒアドキュメントなど、多くの機能を提供します。
最初のUnixシェルは、ベル研究所のケン・トンプソンによって開発され、1971年から1975年にかけてUnixバージョン1から6に同梱されていたトンプソンシェル(sh )でした。 [3]現代の基準からすると原始的なものではありますが、パイプ、とを使用したシンプルな制御構造、ファイル名のGLOB bingなど、後のすべてのUnixシェルに共通する多くの基本機能を導入しました。現在は使用されていませんが、一部の古代UNIXシステムでは今でも利用可能であり、現在のFreeBSDシステムではデフォルトのシェルとなっています。[要出典]ifgoto
これは、1965年にアメリカのソフトウェアエンジニア、グレンダ・シュローダーによって開発されたMulticsシェルをモデルにしています。シュローダーのMulticsシェル自体は、ルイ・プーザンがMulticsチームに提示したRUNCOMプログラムをモデルにしています。一部のUnix設定ファイル(「.bashrc」や「.vimrc」など)に付いている「rc」というサフィックスは、RUNCOM系Unixシェルの名残です。[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] UNIX バージョン 7 のシェルとして 1979 年に配布され、ヒアドキュメント、コマンド置換、より汎用的な変数、より拡張された組み込み制御構造など、それ以降の Unix シェルに共通すると考えられる基本機能の残りの部分を導入しました。ブロックの終了を示す逆順のキーワードを使用するなど、この言語はALGOL 68の影響を受けています。[7] 伝統的に、Bourne シェルのプログラム名はshで、Unix ファイル システム階層におけるパスは/bin/shです。ただし、さまざまな改良や追加機能を備えた、互換性のある類似プログラムも多数提供されています。多くのシステムでは、 sh は次のいずれかへの シンボリック リンクまたはハード リンクです。
POSIX標準では、標準シェルはBourneシェルの拡張版である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 シェルを修正し、必要に応じて組み込みコマンドを追加することで、フォーム入力システムを構築しました。