気の向くままに辿るIT/ICT/IoT
Shell

shell/shell script シェル/シェルスクリプト

ホーム前へ次へ
shell(シェル)

UNIX shell・シェル/shell script・シェルスクリプト

UNIX shell(シェル)とは

 shell(シェル)は、UNIXの代名詞ともいえる存在でUNIXのユーザーインタフェースの基本である文字ベースのCUI(character User Interface)におけるログイン/ログアウト、コマンドライン入力機構(コマンドラインエディタ)ばかりでなく単独のコマンドとして、更に関数として、インタプリタスクリプトとしてハードにおけるOSの機能とコマンドや実行ファイルとして、更にはグルー言語としての機能などを併せ持つ、変幻自在な存在です。

UNIXの変遷とshell

 コンピュータのハードウェアとしては、その考え方を示したチューリングマシンからパンチカードシステムを経て人手による操作命令の組み版、後に開発言語として二進数の0と1というビットから成る機械語の開発、更に多くの人が解読するには無理のあった機械語を人に読みやすく、記述しやすくすべく開発されたアセンブリ言語によってハード(CPUキャッシュ、ハードディスク等)へ直接的な命令を送る形態をとり、他方でOSであるUNIXカーネルとコマンド群が開発され、その際に必然的にハードへの依存度が高いアセンブリ言語との仲介、更に後述のようにより人にわかりやすい言語としてUNIX開発者によってC言語が生まれ、Cはコンパイルから実行ファイルを生成するように作られており、アセンブリ言語はC言語の中ではそのコンパイル過程に存在し、そのほか組み込み用途やOSカーネルを記述する際に利用されており、これらと並行してメインフレーム、マイコン、ワークステーション、PCの原型を経て後のPCに至ります。

 ネットワークとしては第二次世界大戦後24年程経過した1969年頃、TCP/IPは、米国が軍事目的で考案したARPANETの一環として有事の際でも通信ラインが断絶することなく何らかの手法で常に世界中と連絡が取り合えるようにと考案された技術であり、その背景を考えると複雑なところではあります。

 そして(またこれもそうであったと思えるのですが)shellを含むUNIXは、GEとAT&T(という企業の後に独立し紆余曲折するベル研究所)が共同開発していたMultics(GE-645)開発者でもあったケン・トンプソン氏が傍らでそこで動作するゲームを作った後、動作させる為のそのコストの高さからDEC社製のシステムであるPDP-7上にアセンブリ言語によって移植する際に協力を仰いだデニス・リッチー氏(という話は個人的には甚だ疑問は残りますが)、主にこの2人によって1969年アセンブリ言語で書かれたUNIXが開発され、移植性を高める目的でデニス・リッチー氏によって1971年~1973年の間にC言語が開発され、UNIXをC言語で書き直したことで移植性が高まり、それまでUNIXに搭載されていたshellは1977年UNIXのVersion7時代に先の2人と同じベル研究所のスティーブン・ボーン氏により開発されたBourne Shellに、その後shell自体は後述のような変遷があったと一般には伝えられています。

 こうした中、UNIXとTCP/IPは、政府機関や大学を中心とした教育機関に配布され、特に今尚支持されているFreeBSD/NetBSD/OpenBSDといった派生を生むことになるBSD/Berkeley Software Distributionをリリースしたカリフォルニア大学バークレー校の功績、後に1991年ティム・バーナーズ・リー氏によるWWW/World Wide Web構想と世界初のウェブサーバデーモンhttpdなどのその技術の無償提供によってTCP/IPを基盤とした自由な場として民間に開放される道筋が付けられ、平和利用に拍車がかかり、同じ頃、各種UNIX変遷の過程で奮起したリーナス・トーバルズ氏によるLinuxカーネルの開発とオープンソースとしての配布により、オープンソースとしてのUNIX文化はshellを含めLinuxにも踏襲され、これらの人々を含む多くの人々の善意と協力により、あらゆる意味において手放せない、なくてはならないと思えるような技術として今に至ります。

 1998年スケルトンPCとしても話題となった一体型PCであるiMacをリリースしたAppleも2001年MacintoshのOSをBSDをベースとしたMac OS Xに転換し、2007年iPhoneと同じ年にリリースしたバージョンがUNIXとして正式認証されていますが、そのMac OS Xに搭載されたshellはその当初はtcsh、その後bash/Bourne Again Shellに移行しています。

shellの変遷

 その変遷と共にshellの種類は複数あり、以前のUNIX標準であったshellはVersion7からBourne Shellの登場を迎え、同時期にUNIXのVersion6を参考にBSD UNIX上で開発されたshellがcshであり、同時期にできたBourne Shellよりは機能は上だったものの関数の作成やフロー制御構造、構造化プログラミングができなかったなどの理由から拡張版で互換性のあるtcshに、更にBourne Shellをベースにcshの優位性を取り込んで拡張したksh、1987年FSFのGNU ProjectでBourne Shellをベースに開発され、csh、kshを参考に作られた英語で生まれ変わりを意味するborn againにあやかってBourne Again Shellと命名されたbash、更にはBourne Shellをベースにtcsh、ksh、bashを参考に作られたzshなどがあります。

shellとscript

 前述のようにshellは、変幻自在な存在でscriptとしての一面も持ち、shellの派生もさることながら、同じUNIXから誕生したC言語と共に後に誕生するPerl/Python/Rubyなど、その時期において先にできたスクリプトや複数の言語などを参考にしている中でスクリプトの原点となっているとも言えます。

 最初のPerlも考えようによってはそれほど古いわけではなく1987年末にUNIX版として最初の版がリリースされ、Pythonに至ってはLinuxカーネルと同様1991年に公開、1994年IETFからHTMLやCSSを含むHTTP仕様標準化を受け継いだW3Cが設立、日本人が開発したRubyは1995年に世に発表されたと云われています。

 時を同じくして日本では1995年~1996年に公開されたインターネット、ネット対応を謳ったWindows95の発売普及とWeb技術の広がりと共にPerlはCGIとして利用されることも多くなります。

 しかし、これは何もPerlの専売特許でもなんでもなくshellでもC言語でも実現しようと思えば実現できるわけですが、UNIXの成り立ちから成るコマンド群の集積というメリットを逆手に取った形のshellやsed、tr、cp、mv、rmなどをパッケージ化したようなインタフェースとその他UNIXコマンドも実行でき、C言語並みのファイルI/O操作といったその機能性の割りに扱いやすいという印象を与えたことやネットの普及に伴いレンタルサーバなどでCGIとして利用できる言語が限定されている場合、Perlや後に広まったPHPは利用できるというケースも多かったことなどからCGI≒Perlを使うという傾向に至った主な要因と思われます。

 ほんの数年の差ではありますが、おそらくPythonについては当時まだ新しいがゆえに、Rubyは尚更という状況でPerlを選択する向きが多かったのだと思われます。

 PHPについてはPerl、Python、Rubyよりとっつきやすそうであることや先のレンタルサーバ事情と相まって(他と比べても決してそういうわけではないのですが)RDB特にMySQLとの親和性が高く見えたことなどから利用する人が増えているようです。

LINK

ホーム前へ次へ