# shell 初探
## shell 的含義
`shell` ,英文的含義是“殼”,在計算機科學中,是指“為用戶提供用戶界面”的軟件,通常指的是命令行界面的解析器。
一般意義上,這個詞指操作系統中提供訪問內核所提供之服務的程序,因此除了 `CLI`,shell 也包含 GUI 的概念,`Windows Explorer` 是一個典型的圖形界面Shell。
當然,本文只關注 `CLI` 。
`mac` 源自 `unix` 系統,所以其 `shell` 和 `unix` 一脈相承。
### shell 腳本
`shell` 本身的概念其實已經關注的很少,我們的最原始的印象,`shell` 是一門腳本語言,可用于編程。
“shell 腳本”,又稱 Shell 命令稿、程序化腳本,文本文件,由一連串的 `shell` 命令組成,經由 `Unix Shell`執行,可以進行系統管理、文件操作等。
## 環境
當前主流的操作系統都支持 `shell` 編程,本系列所探究的 `shell` 編程是指 Linux 下的 `shell`,講的基本都是 POSIX 標準下的功能,所以,也適用于 Unix及 BSD(如Mac OS)。
### OS
#### Linux
Linux 默認安裝就帶了 shell 解釋器。
#### Mac OS
Mac OS 不僅帶了 sh、bash 這兩個最基礎的解釋器,還內置了 ksh、csh、zsh 等不常用的解釋器。
我個人倒是推薦 `zsh` ,`zsh` 會專門來篇文章介紹。
#### Windows
windows 出廠時沒有內置 shell 解釋器……只能裝模擬器,比如 `cygwin` 。
當然 windows 上的 `PowerShell` 也是不俗的腳本,這個也會專門來個系列介紹。
### 腳本解釋器
當然,腳本解釋器五花八門,下面就挑選些典型的說下。
#### sh
即 Bourne shell,POSIX(Portable Operating System Interface)標準的 shell 解釋器,它的二進制文件路徑通常是 `/bin/sh`,由 Bell Labs 開發。
#### bash
Bash 是 Bourne shell 的替代品,屬 GNU Project,二進制文件路徑通常是 `/bin/bash`。業界通常混用 `bash`、`sh`、和 `shell`,比如你會經常在招聘運維工程師的文案中見到:熟悉 Linux Bash 編程,精通 Shell 編程。
#### zsh
Z Shell(Zsh) 以認為是一種 Bourne shell 的擴展,帶有數量龐大的改進,包括一些bash、ksh、tcsh的功能。
#### 高級編程語言
理論上講,只要一門語言提供了解釋器(而不僅是編譯器),這門語言就可以勝任腳本編程,常見的解釋型語言都是可以用作腳本編程的,如:Perl、Tcl、Python、PHP、Ruby、Nodejs。
## 參考資料
* [Shell腳本編程30分鐘入門](https://github.com/qinjx/30min_guides/blob/master/shell.md)
* [shell](https://zh.wikipedia.org/wiki/%E6%AE%BC%E5%B1%A4)
* [Shell腳本](https://zh.wikipedia.org/wiki/Shell%E8%84%9A%E6%9C%AC)
* [Z shell](Z%20shell)