辞書へ戻る言語の一覧

シェルスクリプト

しぇるすくりぷと言語1977

UNIXのシェル(コマンド解釈器)への命令をまとめて書いて自動実行する仕組み。小さなコマンドをパイプで繋いで仕事をこなすUNIX文化を体現する。地味だが、サーバー運用や自動化の現場で今も毎日使われ続けている。

概要

UNIXのシェル(コマンド解釈器)に対する一連の命令をファイルにまとめて書き、まとめて自動実行できるようにした仕組み。単発のコマンドを対話的に打つのではなく、繰り返し使う操作手順をファイル化して再利用できる点が特徴で、UNIX系OSの自動化・運用管理を支える基礎技術になっている。

時代背景

McIlroy本人の回顧録によれば、UNIXの「シェル」という名前とその大枠のアイデアはMulticsに由来するが、UNIX用には8Kバイトのユーザー空間に収まるよう基本機能まで切り詰められたという。当初のシェルは、自身が起動するプログラムと同じ標準入力からコマンドを読み取る作りだったため、コマンドとデータがコマンドファイル(「runcom」、今でいうシェルスクリプト)の中に混在していた。埋め込まれたデータの終わりを示す方法がなく、シェルスクリプトへパイプで入力を渡すことも、端末名を明示しない限り端末から入力を取ることもできなかった。McIlroyは「これらの問題はBourneシェルが一挙に解決するまで、まったく手つかずのままだった(v7)」と述べている。

小話

McIlroy本人によれば、パイプはDoug McIlroyがKen Thompsonをようやく説得して実現させたものだという。ある夜、Thompsonは一晩でパイプのシステムコールを書いて組み込み、シェルにパイプを追加し、prやovなど複数のユーティリティをフィルタとして使えるよう改修した。翌日には、皆が『配管』の興奮に加わる、忘れがたい「ワンライナーの饗宴」が起きたとMcIlroyは振り返っている。パイプを組み立てるシェルの記法はv3のマニュアルでほぼ1ページを費やして説明される複雑な構文だったが、Thompsonが大きな公開講演で説明する気恥ずかしさを避けるため、扱いやすい中置記法の「|」を提案し、これによりv4のマニュアルでは4つの文で説明できるまでに単純化されたという。

消えた理由

McIlroy本人によれば、v6の時代まで使われていた単純な「昔ながらのシェル」は、Bourneシェルの登場によりほぼ一夜にして駆逐されたという。PWBシェルによってシェルプログラミングは実用的なものになっていたが、「Bourneシェルはそれを、UNIXプログラミングに不可欠な一部にした(v7)」とMcIlroyは評している。Bourneシェル以前は、条件分岐にgoto、ifなどの間に合わせの仕組みが使われていたが、「より大きな計算機という贅沢を得て、Bourneはまさしくプログラム可能なシェルを作り上げ、これらの巧妙だが不格好な仕掛けを廃した(v7)」と述べられている。

分類スクリプト言語
基盤UNIXシェル

関連項目

  • UNIXベル研究所で生まれたOS。小さな道具を組み合わせて使う思想や、ファイルを中心とした設計が後の多くのOSに受け継がれた。C言語とともに育ち、現代のmacOSやLinuxにまでその系譜が続いている。
  • AWKテキストを行・列として処理するのに特化した小さな言語。Unixの定番ツールで、ログ処理やデータ整形に今も使われる。

関連技術

出典