Shell

**殼層**（英語：**Shell**）在電腦科學中指「為使用者提供使用者介面」的軟體，通常指的是命令列介面的解析器。一般來說，這個詞是指作業系統中提供存取核心所提供之服務的程式。Shell 也用於泛指所有為使用者提供操作介面的程式，也就是程式和使用者互動的層面。因此與之相對的是核心（英語：**Kernel**），核心不提供和使用者的互動功能。

不過這個詞也拿來指應用軟體，或是任何在特定元件外圍的軟體，例如瀏覽器或電子郵件軟體是 HTML 排版引擎的 Shell。Shell 這個詞是來自於作業系統（核心）與使用者介面的外層介面。

通常將 shell 分為兩類：命令列與圖形介面。命令列殼層提供一個命令列介面（CLI）；而圖形殼層提供一個圖形使用者介面（GUI）。

## 歷史

殼層（shell）這個說法起源於路易斯・普贊（Louis Pouzin），在 1964 年至 1965 年間首次提出，隨後在 Multics（MULTiplexed Information and Computing System）計畫中首次被實作出來。

Unix 上的第一個 Unix 殼層（Unix shell）是肯・湯普遜（Ken Thompson）以 Multics 上的 shell 為範本，所寫出的 Thompson shell。

微軟的 Windows 作業系統也提供了命令列殼層的功能，它們是 Windows 95 / 98 下的 command.com、Windows NT 核心下的 cmd.exe 以及 PowerShell；而圖形介面殼層即為 explorer.exe。

## 殼層列表

### 圖形化使用者介面（GUI）殼層

GUI 通常會建構在視窗系統上。

* AmigaOS 環境：
  * Workbench（從 AmigaOS 2.0 之後增加了 GUI 殼）
  * Ambient（MorphOS）
  * Directory Opus
  * ScalOS
  * Wanderer（AROS.）
* DOS Shell
* Macintosh Finder
* Microsoft Windows 環境：
  * Aston shell
  * BB4Win
  * Emerge Desktop
  * Geoshell
  * Litestep
  * 程式管理器
  * Secure Desktop
  * SharpE
  * Windows Explorer
  * UserShell
* X Window System 環境或 Wayland 環境（主要用於類 Unix 作業系統）：
  * 獨立的 X 視窗管理員，例如 Blackbox 與 Fluxbox
  * 依靠視窗管理員的完整桌面環境，例如：
    * CDE
    * GNOME
    * Unity（以 GNOME 作核心）
    * KDE
    * XFCE

### 命令列介面（CLI）殼層

#### Unix 或類似作業系統下的殼層

常見或歷史上知名的 Unix 殼層有：

* Bourne shell（sh） /\*'man sh' （頁面存檔備份，存於網際網路檔案館）\*/
  * Almquist shell（ash） /\*'man ash' （頁面存檔備份，存於網際網路檔案館）\*/
    * Debian Almquist shell（dash） /\*'man dash' （頁面存檔備份，存於網際網路檔案館）\*/
  * Bourne-Again shell（bash） /\*'man bash' （頁面存檔備份，存於網際網路檔案館）\*/
  * Korn shell（ksh） /\*'man ksh' （頁面存檔備份，存於網際網路檔案館）\*/
  * Z shell（zsh） /\*'man zsh' （頁面存檔備份，存於網際網路檔案館）\*/
* C shell（csh） /\*'man csh' （頁面存檔備份，存於網際網路檔案館）\*/
  * TENEX C shell（tcsh） /\*'man tcsh' （頁面存檔備份，存於網際網路檔案館）\*/
* EMACS shell (eshell)
* Es shell（es）
* esh (Unix) – Easy Shell
* friendly interactive shell（fish） /\*'man fish' （頁面存檔備份，存於網際網路檔案館）\*/
* rc shell（rc）– shell for Plan 9 from Bell Labs and Unix
* scsh（Scheme Shell）
* Stand-alone Shell（sash）
* BeanShell（bsh （頁面存檔備份，存於網際網路檔案館），bsh.Interpreter , bsh.Console （頁面存檔備份，存於網際網路檔案館）） /\*'man bsh'\*/
* Rhino JavaScript 殼層 （頁面存檔備份，存於網際網路檔案館）（org.mozilla.javascript.tools.shell.Main （頁面存檔備份，存於網際網路檔案館）） /\*'man rhino'\*/

以及 linux 系統上的：'/etc/shells' （頁面存檔備份，存於網際網路檔案館）

#### 非 Unix 作業系統的殼層

* 4DOS, 4OS2, 4NT – JP Software 公司可在在 DOS, OS/2，及 Windows NT 下使用的殼層。Take Command 程式則是 GUI 方式的相容程式。
* Amiga CLI/Amiga 殼層是稱為 Workbench 的 AmigaOS 圖形介面的另一選擇。
* BASIC-PLUS – RSTS/E
* Beemos（BEEMos）–在 Windows XP 上執行的一個小型專案，提供設定、應用程式等功能，感覺起來像是在另一個作業系統下。
* CANDE MCS– MCP 作業系統的指令行殼曾與文字編輯器
* CCP – CP/M 作業系統的主控台指令處理器
* cmd.exe –基於 OS/2、Windows CE、Windows NT 系列作業系統的命令提示字元殼層
* COMMAND.COM – DOS 的殼層
* Commodore DOS Wedge – Commodore 64 上 BASIC 2.0 的延伸功能，包括常用磁碟操作的簡略指令
* DCL – OpenVMS 的標準殼層，衍生自早期的迪吉多（DEC）作業系統
* DDT – 迪吉多（DEC）PDP-10 偵錯工具，麻省理工學院 Incompatible Timesharing System 的指令殼層
* DROS – 智慧型手機上基於 Java ME 平台的類 DOS 殼層
* EFI-SHELL –可擴展韌體介面（Extensible Firmware Interface，EFI）指令殼層，它是開放原始碼的
* Google Shell –基於瀏覽器的 Google Search 前端介面
* iSeries QSHELL – IBM OS/400 上的 Unix 風格殼層
* Macintosh Programmer's Workshop –古典 Mac OS 軟體開發用的老式指令行環境
* Microsoft BASIC –一些古老 8 位元電腦上的主要作業環境
* Rexx – IBM 的手稿語言（scripting language）
* Singularity shell – Singularity 的標準殼層
* Windows PowerShell –命令提示字元的新一代物件導向後繼者（舊稱 Monad 或 Microsoft Shell (MSH)）
* Windows 修復主控台– Windows 2000、Windows XP、Windows 2003 作業系統的一項功能
* YouShell –用於 YouOS，基於 JavaScript 的指令處理器

## 參考文獻

## 外部連結

* 命令殼層概觀，Microsoft Technet （頁面存檔備份，存於網際網路檔案館）
* The Unix Shell: Introduction

## 參見

* 電腦殼的比較
* 殼帳號（Shell Account）
* 殼指令碼（Shell Script）
* 批次檔
* Unix shell
* DOS 殼
* Internet Explorer 殼