shell是什麼語言?shell 語言的本質shell
「Shell是Linux/Unix的一個外殼,你理解成衣服也行。它負責外界與Linux內核的交互,接收用戶或其餘應用程序的命令,而後把這些命令轉化成內核能理解的語言,傳給內核,內核是真正幹活的,幹完以後再把結果返回用戶或應用程序」編程
----池建強 著. 「MacTalk·人生元編程」。 數組
Shell自己是一個用C語言編寫的程序,它是用戶使用Unix/Linux的橋樑,用戶的大部分工做都是經過Shell完成的。Shell既是一種命令語言,又是一種程序設計語言。做爲命令語言,它交互式地解釋和執行用戶輸入的命令;做爲程序設計語言,它定義了各類變量和參數,並提供了許多在高級語言中才具備的控制結構,包括循環和分支。安全
它雖然不是Unix/Linux系統內核的一部分,但它調用了系統核心的大部分功能來執行程序、創建文件並以並行的方式協調各個程序的運行。所以,對於用戶來講,shell是最重要的實用程序,深刻了解和熟練掌握shell的特性極其使用方法,是用好Unix/Linux系統的關鍵。數據結構
shell的語言的運行場景socket
由於Shell彷佛是各UNIX系統之間通用的功能,而且通過了POSIX的標準化。所以,Shell腳本只要「用心寫」一次,便可應用到不少系統上。同時,它運行於高於系統內核的環境,可以簡單地執行一些文件系統級的高級操做。函數
所以,之因此要使用Shell腳本是基於:spa
簡單性:Shell是一個高級語言,處於內核外層環境;經過它,你能夠簡潔地表達複雜的操做。
操作系統
可移植性:使用POSIX所定義的功能,能夠作到腳本無須修改就可在不一樣的系統上執行。
設計
開發容易:能夠在短期內完成一個功能強大又妤用的腳本。
所以shell常見於系統維護中,文本處理也是shell的優點(可以快速地使用文本處理語言,結合管道,重定向實現需求)。
shell語言的限制
Shell腳本的命令限制和效率問題,下列狀況通常不使用Shell:
資源密集型的任務,尤爲在須要考慮效率時(好比,排序,hash等等)。
須要處理大任務的數學操做,尤爲是浮點運算,精確運算,或者複雜的算術運算(這種狀況通常使用C++或FORTRAN 來處理)。
有跨平臺(操做系統)移植需求(通常使用C 或Java)。
複雜的應用,在必須使用結構化編程的時候(須要變量的類型檢查,函數原型,等等)。
對於影響系統全局性的關鍵任務應用。
對於安全有很高要求的任務,好比你須要一個健壯的系統來防止入侵、破解、惡意破壞等等。
項目由連串的依賴的各個部分組成。
須要大規模的文件操做。
須要多維數組的支持。
須要數據結構的支持,好比鏈表或數等數據結構。
須要產生或操做圖形化界面 GUI。
須要直接操做系統硬件。
須要 I/O 或socket 接口。
須要使用庫或者遺留下來的老代碼的接口。
私人的、閉源的應用(shell 腳本把代碼就放在文本文件中,全世界都能看到)。
若是你的應用符合上邊的任意一條,那麼就考慮一下更強大的語言吧——或許是Perl、Tcl、Python、Ruby——或者是更高層次的編譯語言好比C/C++,或者是Java。即便如此,你會發現,使用shell來原型開發你的應用,在開發步驟中也是很是有用的。