什麼是shell?
Shell是一種具備特殊功能的程式,它是介於使用者和UNIX/Linux 作業系統之核心程式(kernel)間的一個介面。為什麼我們說 shell是一種介於系統核心程式與使用者間的中介者呢?讀過作業系統概論的讀者們都知道作業系統是一個系統資源的管理者與分配者,當您有需求時,您得向系統提出;從作業系統的角度來看,它也必須防止使用者因為錯誤的操作而造成系統的傷害?眾所周知,對電腦下命令得透過命令(command)或是程式(program);程式有編譯器(compiler)將程式轉為二進位代碼,可是命令呢?其實shell也是一支程式,它由輸入裝置讀取命令,再將其轉為電腦可以瞭解的機械碼,然後執行它。
各種作業系統都有它自己的shell,以DOS為例,它的shell就是command.com 檔。如同 DOS下有NDOS,4DOS,DRDOS 等不同的命令解譯程式可以取代標準的command.com ,UNIX下除了Bourne shell(/bin/sh) 外還有C shell(/bin/csh)、Korn shell(/bin/ksh)、Bourne again shell(/bin/bash)、Tenex C shell(tcsh) … 等其它的shell。UNIX/Linux 將shell獨立於核心程式之外,使得它就如同一般的應用程式,可以在不影響作業系統本身的情況下進行修改、更新版本或是添加新的功能。
shell的啟用
在系統起動的時候,核心程式會被載入記憶體,負責管理系統的工作,直到系統關閉為止。它建立並控制著處理常式,管理記憶體、檔案系統、通訊等等。而其它的程式,包括 shell程式,都存放在磁碟中。核心程式將它們載入記憶體,執行它們,並且在它們中止後清理系統。shell是一個公用程式,它在您簽入時起動。藉由解譯使用者輸入的命令(由命令列或命令檔),shell提供使用者和核心程式產生交談的功能。
當您簽入(login)時,一個交談式的shell會跟著起動,並提示您輸入命令。在您鍵入一個命令後,接著就是shell的工作了,它會進行:
1.文法分析命令列。
2.處理萬用字元(wildcards)、轉向(redirection)、管線(pipes)與工作控制(job control)。
3.搜尋並執行命令。
當您剛開始學UNIX/Linux系統時,您大部份的時間會花在於提示符號(prompt)下執行命令。
如果您經常會輸入一組相同形式的命令,您可能會想要自動執行那些工作。如此,您可以將一些命令放入一個檔案(稱為命令檔,script),然後執行該檔。一個shell命令檔很像是DOS下的批次檔(如 Autoexec.bat):它把一連串的UNIX 命令存入一個檔案,然後執行該檔。較成熟的命令檔還支援若干現代程式語言的控制結構,譬如說能做條件判斷、迴圈、檔案測試、傳送參數等。要寫著寫命令檔,不僅要學習程式設計的結構和技巧,而且對 UNIX/Linux 公用程式及如何運作需有深入的瞭解。有些公用程式的功能非常強大(例如 grep、sed 和awk),它們常被用於命令檔來操控命令輸出和檔案。在您對那些工具和程式設計結構變得熟悉之後,您就可以開始寫命令檔。當由命令檔執行命令時,此刻,您就已經把 shell當做程式語言使用了。
細說 shell的生平
第一個有重要意義的,標準的UNIX shell是V7(AT&T的第七版)UNIX,在1979 年底被提出,且以它的創造者 Stephen Bourne 來命名。Bourne shell是以Algol 這種語言為基礎來設計,主要被用來做自動化系統管理工作。雖然 Bourne shell以簡單和速度而受歡迎,但它缺少許多交談性使用的特色,例如曆程、別名和工作控制。
C shell是在加州大學柏克來分校於70年代末期發展而成,而以2BSD UNIX的部分發行。這個 shell主要是由Bill Joy 寫成,提供了一些在標準 Bourne shell所看不到的額外特色。C shell是以C 程式語言作為基礎,且它被用來當程式語言時,能共用類似的文法。它也提供在交談式運用上的改進,例如命令列曆程、別名和工作控制。因為C shell是在大型主機器上設計出來,且增加了一些額外功能,所以C shell有在小型機器上跑得較慢,即使在大型主機器上跟 Bourne shell比起來也顯得緩慢。
有了Bourne shell和C shell之後,UNIX 使用者就有了選擇,且爭論那一個 shell較好。AT&T 的David Korn 在80 年代中期發明了Korn shell,在1986 年發行且在1988 年成為正式的部分SVR4 UNIX。Korn shell實際上是Bourne shell的超集,且不只可在UNIX系統上執行,同時也可在OS/2、VMS、和DOS上執行。它提供了和Bourne shell向上相容的能力,且增加了許多在C shell上受歡迎的特色,更增加了速度和效率。 Korn shell已曆經許多修正版,要找尋您使用的是那一個版本可在ksh 提示符號下按 Ctrl-v 鍵。