SHELL種類,版本及選擇

來源:互聯網
上載者:User

標籤:

SHELL種類,版本及選擇

凡是使用 *INX 的人,不論是作為 login shell 還是編程,多少都要接觸到 Shell。
經過多年的發展, Shell 的種類繁多。除了我們熟悉的 sh、ksh、csh、bash ... 外,還有各種 free 或商業版本如: RC、ES、EShell、psh、Zoidberg 等等。種類多了,也就有的標準化的要求,這就是 POSIX 的由來。

其實,就是常見的 Shell,也是功能不同,風格各異。一般來說,人們容易囤於固有的平台,使用 default 的 shell,也就是 /bin/sh。然而,不同的系統的 shell 從名字到 path 都不相同。由於最早的 shell 是 Bourne Shell,所以UNIX 上的 sh 就是 Bourne Shell。但現在有些混亂了,比如 HP-UX 11i 上已變成 POSIX sh 了。下面列出在個平台上常見 shell。


SHELL     Solaris 9          HP-UX 11i      AIX 5.3         SCO 7.14        LINUX (RedHat)
-----     ---------          ---------      -------         --------        --------------
BSH       /usr/bin/sh        N/A            /usr/bin/bsh    /usr/bin/sh     /bin/ash (bsh -> ash)
CSH       /usr/bin/csh       /usr/bin/csh   /usr/bin/csh    /usr/bin/csh    /bin/csh -> tcsh
TCSH      /usr/bin/tcsh      N/A            N/A             N/A             /bin/tcsh
KSH88     /usr/bin/ksh       /usr/bin/ksh   /usr/bin/ksh    /usr/bin/ksh88  N/A
KSH93     /usr/dt/bin/dtksh  dtksh          /usr/bin/ksh93  /usr/bin/ksh    N/A
BASH      /usr/bin/bash      N/A            N/A             N/A             /bin/bash
PDKSH     N/A                N/A            N/A             N/A             /bin/ksh
POSIXSH   /usr/xpg4/bin/sh   /bin/sh        /usr/bin/psh    /u95/bin/sh     /bin/sh (-> bash)
ZSH       /usr/bin/zsh       N/A            N/A             N/A             /bin/zsh

瞭解不同的 shell 及版本很重要,尤其當在不同平台之間移植程式時。我就曾協助一位朋友用 ksh93 寫了個 script,結果他在 sco 5.0.5 上不能執行,原來他是 ksh88,不支援 ++ 算符。
1. login shell for root user

root 使用者的 login shell 應該選用靜態串連(statically linked)版本的 shell,
如  /sbin/sh (solaris, HP-UX, SCO),  /sbin/sash  (RedHat Linux)
以防 share library 丟失或所在分區 mount 不上時, root 使用者可 login。

2. 用於編寫 script 的 shell,從可移植性和普遍性上考慮,建議用 ksh。
因為 POSIX 1003.2 就是以 ksh 為藍本的。而 bash 又是遵尋 POSIX 寫的。但 bash 除 linux 外,應用較少。而且,有些 ksh93 中的特性 bash 中沒有,如 associative arrays。

3. 一般使用者的 login shell,參考一下 Russell Quong 的《Shell scripts in 20 pages》:

Overall evaluation

Shell         Interactive     Scripting
sh            C-              B
ksh           B+              A-
bash          A               A
csh           B+              C-
tcsh          A               C+
zsh           A- (?)          A (?)
rc/es         A- (?)          A (?)

由於個人的原因,Russell 對 bash 過於偏好了。其實 zsh 應該是 A+,A+。zsh 基本上是 ksh、bash、csh 的 superset,功能十分強大。建議使用。去這裡 http://www.zsh.org/ 可更多的瞭解 zsh。可惜現在用的人不多。

不過這麼多 shell,有一點我不滿意,就是都缺少嵌入式的 awk 及 Regex 功能。psh (Perl Shell)是個彌補的例子,但畢竟不是真正的 Shell。本想自己寫一個,看了一下 bash 3.0 的 source code,有 30 萬行,只好做罷。

對於 sh、csh 就沒什麼好辦法了,因為曆史原因,一般無版本資訊,除非看 source code。
去這裡 http://www.in-ulm.de/~mascheck/bourne/ 看各平台對應的 sh。

SHELL種類,版本及選擇

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.