Shell自己是一個用C語言編寫的程序,它是用戶使用Linux的橋樑。Shell既是一種命令語言,又是一種程序設計語言。做爲命令語言,它交互式地解釋和執行用戶輸入的命令;做爲程序設計語言,它定義了各類變量和參數,並提供了許多在高級語言中才具備的控制結構,包括循環和分支。shell
它雖然不是Linux系統核心的一部分,但它調用了系統核心的大部分功能來執行程序、創建文件並以並行的方式協調各個程序的運行。編程
所以,對於用戶來講,shell是最重要的實用程序,深刻了解和熟練掌握shell的特性極其使用方法,是用好Linux系統的關鍵.數組
Shell是一種腳本語言,就必須有解釋器來執行這些腳本安全
咱們常說有多少種Shell,其實說的是Shell腳本解釋器bash
bash是Linux系統默認使用的shell。bash由Brian Fox和Chet Ramey共同完成,是BourneAgain Shell的縮寫,內部命令一共有40個。數據結構
Linux使用它做爲默認的shell是由於它有諸如如下的特點:socket
可使用方向鍵查閱和快速輸入並修改命令。函數
自動經過查找匹配的方式給出以某字符串開頭的命令。性能
包含了自身的幫助功能,你只要在提示符下面鍵入help就能夠獲得相關的幫助。ui
如何編寫一個shell(bash)腳本
爲何要編寫shell腳本
Shell有兩種執行命令的方式:
交互式(Interactive):解釋執行用戶的命令,用戶輸入一條命令,Shell就解釋執行一條。
批處理(Batch):用戶事先寫一個Shell腳本(Script),其中有不少條命令,讓Shell一次把這些命令執行完,而沒必要一條一條地敲命令。
Shell腳本也有變量和流程控制語句,但Shell腳本是解釋執行的,不須要編譯,Shell程序從腳本中一行一行讀取並執行這些命令,至關於一個用戶把腳本中的命令一行一行敲到Shell提示符下執行。
簡單性:Shell是一個高級語言;經過它,你能夠簡潔地表達複雜的操做。
可移植性:使用POSIX所定義的功能,能夠作到腳本無須修改就可在不一樣的系統上執行。
開發容易:能夠在短期內完成一個功能強大又好用的腳本。
還有哪些腳本解釋器
哪些狀況下不適合使用Shell腳本
sh 由Steve Bourne開發,是Bourne Shell的縮寫,各類UNIX系統都配有sh。
ash shell 是由Kenneth Almquist編寫的,Linux中佔用系統資源最少的一個小shell,它只包含24個內部命令,於是使用起來很不方便。
csh 是Linux比較大的內核,它由以William Joy爲表明的共計47位做者編成,共有52個內部命令。該shell實際上是指向/bin/tcsh這樣的一個shell,也就是說,csh其實就是tcsh。
ksh 是Korn shell的縮寫,由Eric Gisin編寫,共有42條內部命令。該shell最大的優勢是幾乎和商業發行版的ksh徹底兼容,這樣就能夠在不用花錢購買商業版本的狀況下嘗試商業版本的性能了。
可是,考慮到Shell腳本的命令限制和效率問題,下列狀況通常不使用Shell:
1.資源密集型的任務,尤爲在須要考慮效率時(好比,排序,hash等等)。
2.須要處理大任務的數學操做,尤爲是浮點運算,精確運算,或者複雜的算術運算(這種狀況通常使用C++或FORTRAN 來處理)。
3.有跨平臺(操做系統)移植需求(通常使用C 或Java)。
4.複雜的應用,在必須使用結構化編程的時候(須要變量的類型檢查,函數原型,等等)。
5.對於影響系統全局性的關鍵任務應用。
6.對於安全有很高要求的任務,好比你須要一個健壯的系統來防止入侵、破解、惡意破壞等等。
7.項目由連串的依賴的各個部分組成。
8.須要大規模的文件操做。
9.須要多維數組的支持。
10.須要數據結構的支持,好比鏈表或數等數據結構。
11.須要產生或操做圖形化界面 GUI。
12.須要直接操做系統硬件。
13.須要 I/O 或socket 接口。
14.須要使用庫或者遺留下來的老代碼的接口。
15.私人的、閉源的應用(shell 腳本把代碼就放在文本文件中,全世界都能看到)。
①百度
②http://www.jb51.net/article/52374.htm