shell的歷史、作用和職責

原文鏈接:http://os.chinaunix.net/a2007/0603/970/000000970452.shtml


1.3 shell的歷史

第一個重要的標準UNIX shell於1979年末在V7(AT&T的第7版)UNIX上推出,並以作者Stephen Bourne的名字命名。作爲編程語言,Bourne shell基於另一種叫做Algol的語言。Bourne shell當時主要用於系統管理任務的自動化,Bourne shell以簡單和高速而受歡迎,卻缺少了很多用於交互的功能,如命令歷史、別名和作業控制。

C shell由加州大學Berkeley分校於20世紀70年代末開發,作爲2BSD UNIX系統的一部分發布。它的主要開發者是Bill Joy。C shell提供了很多標準的Bourne shell不具備的功能。C shell基於C語言,作爲編程語言使用時,語法也類似於C。C shell也提供了增強交互使用的功能,如命令行歷史、別名和作業控制。由於是爲大型機設計並增加了很多新功能,C shell在小型機器上運行可能比較慢。而且,即使在大型機上,它的速度也不如Bourne shell。

Bourne shell和C shell共存使UNIX用戶有了選擇,也導致了人們對哪個shell更好的爭論。20世紀80年代中期,AT&T的David Korn推出了Korn shell。Korn shell於1986年發佈,並在1988年UNIX的SVR4版本發佈時正式成爲它的一部分。Korn shell其實是Bourne shell的一個擴展集,它不僅能運行於UNIX系統,還能在OS/2、VMS和DOS上運行。Korn shell提供了對Bourne shell的向上兼容性,加入了許多C shell中受歡迎的功能,而且快速和高效。Korn shell經歷了許多版本,雖然1993版正逐漸流行,目前用得最廣泛的還是1988版。Linux用戶可能會發現自己正在使用Korn shell的免費版本,叫作Public Domain Korn shell,簡稱pdksh。pdksh是1988版Korn shell的克隆版。pdksh是免費和可移植的。對它的改進正在進行中,以使其能夠完全兼容Korn shell,並且符合POSIX標準。此外還有Z shell(zsh),這也是一個Korn shell的克隆版,集成了TC shell的一些功能。Z shell的作者是Paul Falsted,可以從很多網站免費獲取。

隨着Linux的發展,Bourne Again shell(bash)開始流行起來。自由軟件基金會的Brian Fox取得GNU版權許可後於1988年開發出bash。bash是Linux操作系統上默認的shell。它的設計符合了IEEE POSIX P1003.2/ISO 9945.2 shell和工具標準。在交互和編程兩方面,bash都提供了很多Bourne shell沒有的功能(但Bourne shell腳本無需修改還能在bash下運行)。bash還結合了C shell和Korn shell最有用的功能,它真的很棒。bash對Bourne shell的改進包括:命令行歷史與編輯、目錄棧、作業控制、函數、別名、數組、整數運算(底數可以是2~64),以及Korn shell的一些功能,如擴展的元字符,用於生成菜單的select循環和let命令等。

TC shell是C shell的擴展版本,且具有完全兼容性。新增的功能包括:命令行編輯(emacs和vi)、歷史清單的滾動、高級的文件名功能、變量和命令補全、拼寫糾錯、作業調度、賬戶自動上鎖和註銷、歷史清單中增加時間戳等。新增的功能確實很多。人們經常會問“TC shell中的T到底代表什麼含義呢?”這就要涉及到一段歷史。1976年,DEC發佈了一種新的虛擬內存操作系統——TOPS-20,這種操作系統基於TENEX,可以被美國國內的多個研究人員同時使用。TOPS-20最顯著的特點是“遺忘識別”,也稱爲“命令補全”,用戶可以藉助Esc鍵獲取大多數的命令或助記符,從而使得系統能正常運行。TC shell的創建者受到TENEX/TOPS-20的這個功能以及其他功能的影響,開發了csh的一種版本,並模仿TENEX的名稱,將這種shell稱爲TENEX C shell,簡稱爲TC shell、tc-shell或tcsh。關於tcsh的更多信息,請訪問info.astrian.net/doc/tcsh/copyright。

1.3.1 shell的作用

shell的一項主要功能是在交互方式下解釋從命令行輸入的命令。shell解析命令行,將其分解爲詞(也稱爲token),詞之間由空白分隔,空白由製表符、空格鍵或換行組成。如果詞中有特殊的元字符,shell會對其進行替換。shell處理文件I/O和後臺進程。對命令行的處理結束後,shell搜索命令並開始運行它。

shell的另一項重要功能是定製用戶環境,這通常在shell的初始化文件中完成。初始化文件中有很多定義,包括設置終端鍵和窗口屬性,設置用來定義搜索路徑、權限、提示符和終端類型的變量,設置特定應用程序所需的變量,如窗口、字處理程序和編程語言的庫等。Korn/Bash shell和C/TC shell還提供了更多的定製功能:歷史添加、別名、設置內置變量防止用戶破壞文件或無意中退出,通知用戶作業完成。

shell還能用作解釋性的編程語言。shell程序(也稱爲shell腳本)由文件中的一列命令組成。shell程序用編輯器生成(也可以在命令行上直接輸入腳本)。它們由UNIX命令組成,命令之間插入了一些基本的程序結構,如變量賦值、條件測試和循環。shell腳本不需要編譯。shell會逐行解釋腳本,就好像它是從鍵盤輸入一樣。shell負責解釋命令,因此,用戶需要了解可用的命令有哪些。附錄A中列出了一些有用的命令。

1.3.2 shell的職責

shell負責確保用戶在命令提示符後輸入的命令被正確執行。其職責包括:

(1) 讀取輸入並解析命令行

(2) 替換特殊字符,比如通配符和歷史命令符

(3) 設置管道、重定向和後臺處理

(4) 處理信號

(5) 程序執行的相關設置


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章