シェルとは¶
シェルの基本は、コマンドを実行するためのマクロプロセッサです。マクロプロセッサとは、テキストやシンボルを展開してより大きな表現を行う機能を意味します。
Unixシェルは、コマンドインタープリタであると同時に、プログラミング言語でもあります。コマンドインタプリタとしてのシェルは、豊富なユーティリティのユーザーインターフェースを提供します。プログラミング言語の機能により、これらのユーティリティを組み合わせることができます。コマンドを含むファイルを作成して、それ自体がコマンドになることができます。これらの新しいコマンドは、/binなどのディレクトリにあるシステムコマンドと同じステータスを持ち、ユーザーやグループが共通のタスクを自動化するためのカスタム環境を構築することができます。
シェルは対話的にも非対話的にも使用することができます。インタラクティブモードでは、キーボードから入力された入力を受け付けます。非対話的に実行する場合、シェルはファイルから読み込んだコマンドを実行します。
シェルでは、コマンドを同期的にも非同期的にも実行することができます。非同期のコマンドは、シェルが追加のコマンドを読み込んで実行している間、シェルと並行して実行され続けます。リダイレクト機能により、これらのコマンドの入力と出力を細かく制御することができます。さらに、シェルでは、コマンドの環境の内容を制御することができます。
また、シェルには、個別のユーティリティでは実現できない、小さな組み込みコマンド(ビルトイン)が用意されています。例えば、cd、break、continue、execは、シェル自体を直接操作するため、シェルの外では実装できません。history, getopts, kill, pwd などの組み込み関数は、別のユーティリティで実装することもできますが、組み込みコマンドとして使用した方が便利です。
コマンドを実行することは重要ですが、シェルの実力のほとんどは、組み込まれたプログラミング言語によるものです。他の高級言語と同様に、シェルには、変数、フロー制御構文、クオート、関数などが用意されています。
シェルには、プログラミング言語を拡張するというよりも、特にインタラクティブな使用に適した機能があります。これらの対話型機能には、ジョブ制御、コマンドライン編集、コマンド履歴、エイリアスなどがあります。
Bashとは¶
Bashは、シェルのひとつで、AlmaLinuxのデフォルトのシェルになっています。名前は「Bourne-Again SHell」の頭文字を取ったもので、現在のUnixシェルの直接の祖先であるshの作者Stephen Bourneにちなんでいます。
Bashはshとほぼ互換性があり、KornシェルのkshやCシェルのcshから便利な機能を取り入れています。IEEE POSIX仕様(IEEE Standard 1003.1)のIEEE POSIX Shell and Tools部分に準拠した実装を目指しています。また、shよりも機能的に改善されており、対話型およびプログラミング型の両方で使用できます。