シェル
コマンドラインシェルとグラフィカルシェルの2種類の形態へ大別される:
コマンドラインシェル:キャラクタユーザインタフェース(CUI)ベースのコマンドラインインタプリタ(CLI)
グラフィカルシェル:グラフィカルユーザインタフェース(GUI)ベースでいわゆる「デスクトップメタファ」等の環境へのユーザインタフェース
CLIとGUIのどちらが優れているかという議論はしばしば行われている。CLI支持派は、特定の操作(ファイル群の移動など)を行う際にGUIよりもCLIの方が速いと主張する。また、CLIには複数のコマンドを組み合わせて素早く高度な処理を行えるとの主張もある。一方GUI支持派は、グラフィカルシェルの方がユーザビリティが高くシンプルだと主張する。しかし、用途により適するものは異なる。たとえばサーバ管理はリモートのことも多く、VNCなどでGUI画面を転送してネットワーク帯域を浪費することは好ましくなかったり、そもそもセキュリティポリシー的にそのような接続は禁止されることもある。一方で、たとえば画像や映像などのデータの開発や編集にはGUIの方が適している。少なくとも、多くのCLIにはソフトウェアの連携においてGUIを圧倒する柔軟性を持つパイプライン機能が備わっており、慣れれば短時間で既存のソフトウェアを繋ぎ合わせて高度な処理を記述できる事と、OSがクラッシュして最小構成でしか起動できなくなった場合にはCLIしか利用できない事から、システム開発・運用・管理の現場ではCLIスキルは重要視されている。
以下の機能のそれぞれを持つものもあれば、持たないものもある。
プログラム名(プログラム出力)を指定してアプリケーションを起動
プログラムを終了する、フォアグラウンド・バックグラウンドを切り替えといった、ジョブ制御
プログラムの出力をファイルに出力する(リダイレクト)、他のプログラムの入力とする、といったパイプ制御
プログラムの動作環境の設定に使用する環境変数、シェル変数の設定・参照
入力コマンドライン中の特別な記法で指定した部分をファイル名としてパターンマッチさせて展開する機能(ワイルドカードの展開)
入力履歴を呼び出す(コマンド入力ヒストリ)
コマンドに別名をつける(エイリアス)
繰り返しコマンドを実行したり、条件に応じて実行させたりするための制御構造
入力時のファイル名などの補完機能
まとまった一連の入力をシェルスクリプトとして実行する(次節)
多くのコマンドラインシェルが、対話的に利用するだけでなく、テキストファイルないしパイプからのテキストをコマンドとみなして処理できる。これにより、ある種のプログラミング言語のインタプリタのように利用できる。そのようなシェルスクリプトで利用する場合に便利な多くの機能は、対話的にも利用できることが多い(たとえば Bourne Shell ではそうなっている)。いっぽうで C Shell のように、設計時に対話的利用に重点が置かれすぎたため、シェルスクリプト・プログラミングが推奨されないとされているシェルもある(Csh Programming Considered Harmful)。逆にスクリプト言語としての設計が重視された Microsoft PowerShell のような例もある。あるいは、プログラミング言語のインタプリタとして、Lispなどの処理系でREPLと呼ばれるものもシェルに近い。