Shell自己是一個用C語言編寫的程序,它是用戶使用Unix/Linux的橋樑,用戶的大部分工做都是經過Shell完成的。Shell既是一種命令語言,又是一種程序設計語言。做爲命令語言,它交互式地解釋和執行用戶輸入的命令;做爲程序設計語言,它定義了各類變量和參數,並提供了許多在高級語言中才具備的控制結構,包括循環和分支。
它雖然不是Unix/Linux系統內核的一部分,但它調用了系統核心的大部分功能來執行程序、創建文件並以並行的方式協調各個程序的運行。所以,對於用戶來講,shell是最重要的實用程序,深刻了解和熟練掌握shell的特性極其使用方法,是用好Unix/Linux系統的關鍵。
能夠說,shell使用的熟練程度反映了用戶對Unix/Linux使用的熟練程度。linux
Shell有兩種執行命令的方式:shell
Shell腳本和編程語言很類似,也有變量和流程控制語句,但Shell腳本是解釋執行的,不須要編譯,Shell程序從腳本中一行一行讀取並執行這些命令,至關於一個用戶把腳本中的命令一行一行敲到Shell提示符下執行。
Shell初學者請注意,在日常應用中,建議不要用 root 賬號運行 Shell 。做爲普通用戶,無論您有意仍是無心,都沒法破壞系統;但若是是 root,那就不一樣了,只要敲幾個字母,就可能致使災難性後果。編程
Unix/Linux上常見的Shell腳本解釋器有bash、sh、csh、ksh等,習慣上把它們稱做一種Shell。咱們常說有多少種Shell,其實說的是Shell腳本解釋器。bash
bash是Linux標準默認的shell,本教程也基於bash講解。bash由Brian Fox和Chet Ramey共同完成,是BourneAgain Shell的縮寫,內部命令一共有40個。
Linux使用它做爲默認的shell是由於它有諸如如下的特點:編程語言
sh 由Steve Bourne開發,是Bourne Shell的縮寫,sh 是Unix 標準默認的shell。性能
ash shell 是由Kenneth Almquist編寫的,Linux中佔用系統資源最少的一個小shell,它只包含24個內部命令,於是使用起來很不方便。ui
csh 是Linux比較大的內核,它由以William Joy爲表明的共計47位做者編成,共有52個內部命令。該shell實際上是指向/bin/tcsh這樣的一個shell,也就是說,csh其實就是tcsh。設計
ksh 是Korn shell的縮寫,由Eric Gisin編寫,共有42條內部命令。該shell最大的優勢是幾乎和商業發行版的ksh徹底兼容,這樣就能夠在不用花錢購買商業版本的狀況下嘗試商業版本的性能了。
注意:bash是 Bourne Again Shell 的縮寫,是linux標準的默認shell ,它基於Bourne shell,吸取了C shell和Korn shell的一些特性。bash徹底兼容sh,也就是說,用sh寫的腳本能夠不加修改的在bash中執行。code
不少傳統的程序設計語言,例如Fortran、Ada、Pascal、C、C++和Java,都是編譯型語言。這類語言須要預先將咱們寫好的源代碼(source code)轉換成目標代碼(object code),這個過程被稱做「編譯」。
運行程序時,直接讀取目標代碼(object code)。因爲編譯後的目標代碼(object code)很是接近計算機底層,所以執行效率很高,這是編譯型語言的優勢。
可是,因爲編譯型語言多半運做於底層,所處理的是字節、整數、浮點數或是其餘機器層級的對象,每每實現一個簡單的功能須要大量複雜的代碼。例如,在C++裏,就很難進行「將一個目錄裏全部的文件複製到另外一個目錄中」之類的簡單操做。對象
解釋型語言也被稱做「腳本語言」。執行這類程序時,解釋器(interpreter)須要讀取咱們編寫的源代碼(source code),並將其轉換成目標代碼(object code),再由計算機運行。由於每次執行程序都多了編譯的過程,所以效率有所降低。
使用腳本編程語言的好處是,它們多半運行在比編譯型語言還高的層級,可以輕易處理文件與目錄之類的對象;缺點是它們的效率一般不如編譯型語言。不過權衡之下,一般使用腳本編程仍是值得的:花一個小時寫成的簡單腳本,一樣的功能用C或C++來編寫實現,可能須要兩天,並且通常來講,腳本執行的速度已經夠快了,快到足以讓人忽略它性能上的問題。腳本編程語言的例子有awk、Perl、Python、Ruby與Shell。