Bourne shell作者スティーブン・ボーン
初版1977年
対応OSUNIX
種別Unixシェル
テンプレートを表示
Bourne Shell(ボーンシェル)は、Unix Version 7 のデフォルトシェルでUnixで使われていたUnixシェルの一つである。POSIX規格で規定されるUnix系システムではBourne Shell後継のPOSIX準拠のシェルに置き換わっており、POSIXに準拠していないBourne Shellはすでに使われていない。/bin/shはかつてはBourne Shellだったが、現在はPOSIXシェルへのシンボリックリンクかハードリンクになっている。多くのUnix系システムでは現在でもシェルスクリプトを記述するのに/bin/shが一般的に使われている。ただし、ユーザが通常使うシェルにはインタラクティブに適したPOSIX準拠シェルを用いることが一般的である。
AT&Tベル研究所のスティーブン・ボーンが開発し、それまでの Thompson shell を置き換えた。いずれもコマンド名は sh である。Version 7 Unix の一部として1977年に大学等に配布された。対話型のコマンドインタプリタとしても使われるが、スクリプト言語としての性格が強く、一般に構造化プログラムを作り出すと考えられている全ての機能を含んでいる。
ブライアン・カーニハンとロブ・パイクによる『UNIXプログラミング環境』の出版が Bourne Shell の人気を高めた。これはチュートリアル形式でプログラミング言語としてのシェルを紹介した最初の商業出版本である。 Bourne shell は Mashey shell
起源
当初の設計目標には、以下の事柄が含まれていた[1]。 UNIX Version 7 での Bourne Shell の機能と特徴を以下に挙げる: また、Bourne Shell はエラーメッセージのために 2番のファイル記述子を使うという規定を最初に採用したプログラムでもある。これにより、エラーメッセージをデータと分離してスクリプトで制御することが容易になった。 スティーブン・ボーンは自身がケンブリッジ大学で関わっていた ALGOL 68C コンパイラのいくつかの特徴をこのシェルに取り込んだ。例えば、"if ~ then ~ else ~ fi"、"case ~ in ~ out ~ esac"、"for ~ while ~ do ~ od" といった構文である。さらに Version 7 のシェルはC言語で記述されているが、ボーンはそのソースコードをALGOL68風にするためにいくつかのマクロ[2]を使っている。このマクロは、IOCCCが開催される元の1つとなった(他に、4.2BSDの finger コマンドも元になっている)[3]。
シェルスクリプトをフィルタとして使えるようにする。
制御構造と変数を導入してプログラムのしやすさを向上させる。
全ての入出力ファイル記述子を制御する。
シェルスクリプト内でシグナル処理を制御する。
シェルスクリプトを解釈する際の文字列長の制限を撤廃する。
文字列のクォート機構を合理的かつ汎用的にする。
Version 7 で環境変数機構が追加された。これを利用して、シェルスクリプトが初期化時に構築した環境情報を、わざわざパラメータを使わずとも子スクリプト (子プロセス) に渡すことができる。
機能と特徴
スクリプトは、そのファイル名を使ってコマンドとして呼び出すことができる。
対話的にも非対話的にも使える。
コマンド群の同期実行も非同期実行も可能。
入出力のリダイレクトとパイプラインをサポート。
組み込みコマンド群を提供。
フロー制御構成子、引用ファシリティ、関数を提供。
型のない変数。
局所と大域の変数スコープを提供。
スクリプトは実行前にコンパイルする必要が無い。
Goto機能を持っていない。
バッククォートを使ったコマンド置換(Command substitution): `command`
<< を使ったヒアドキュメント(Here documents)機能。スクリプト内に埋め込まれたテキストブロックを入力として使う。
"for ~ do ~ done" ループ。特に、$* を使って引数列上をループする方法。
"case ~ in ~ esac" による選択機構。主に引数解析に使われる。
sh は、環境変数を使ってエクスポート可能なキーワードパラメータや変数を実現している。
入出力制御と表現マッチングのために強力な機能を用意している。
1979年以降に導入された機能