Linux Shell程式設計(1)——shell程式設計簡介

尹成發表於2014-09-30
Shell是一個命令直譯器。它不僅是作業系統核心與使用者之間的絕緣層,同時也是一種功能相當強大的程式語言。一個Shell程式,通常稱為指令碼,它是一個由系統呼叫,命令工具,軟體包和已編譯的二進位制包"粘合" 起來的極易使用的工具。事實上,整個UNIX系統命令,軟體包和工具都能由一個shell指令碼呼叫。如果這還不夠,Shell的內部命令,比如測試和迴圈結構,都使Shell指令碼更強大和更有彈性。Shell指令碼在系統管理任務表現非常的出色,並且對於日常反覆性的處理工作避免了使用那些結構過於複雜的程式語言。


指令碼應用知識對於希望相當精通系統管理的任何人來說是必需的,即使他實際上並不想寫一個指令碼程式。一般來說一個Linux機器啟動後,它會執行在/etc/rc.d 目錄下的Shell指令碼重建系統環境並且啟動各種服務。理解這些啟動指令碼的細節對分析系統運作行為並修改它是意義重大的。


編寫shell指令碼不是很難學,因為指令碼內建的功能集(check?)和他們只有相當少的shell的操作符和選項 [1] 需要學。語法非常的簡單易懂,就像在命令列上呼叫和連線軟體包一樣容易,它僅有一些少量的 "規則" 需要掌握。大多數短小的指令碼第一次就工作的很好,即使是較長的指令碼除錯也相當的容易。


shell指令碼是一個複雜應用原型的"quick and dirty" 方法。在專案開發中用shell程式設計實現一個有限的功能性子集常常是有用的開始。用這種方法去測試應用程式的結構和模組組合,可以在實際地用C,C++,Java或者Perl進行程式設計之前發現主要的設計缺陷。


Shell程式設計遵從經典UNIX哲學:把複雜的問題分解成簡單的小問題,然後再把各部分功能組合起來解決複雜問題。這和用新一代高階的多用途的語言,例如Perl,試圖成為所有人處理所有事情的語言但是所付出的代價是強迫改變你的思維方法來適應這種工具,大多數人認為這是一個更好的或者至少感覺上更令人能接受的方法。


什麼時候不適合使用Shell程式設計:


資源緊張的專案,特別是那些速度是重要因素的地方(排序,散序,等等)
程式要進行很複雜的數學計算,特別是浮點計算,任意精度的計算,或者是複數計算(應該用C++或是FORTRAN代替)
要求交叉編譯平臺的可移植性(使用C或者是Java代替)
需要結構化程式設計的複雜應用(需要變數型別檢查和函式原型等等)
對於影響系統全域性性的關鍵任務應用。
安全非常重要。你必須保證系統完整性和抵抗入侵,攻擊和惡意破壞。
專案由連串的依賴的各個部分組成。
多種檔案操作要求(Bash被限制成檔案順序存取,並且是以相當笨拙,效率低下的逐行的存取方式)
需要良好的多維陣列支援。
需要類似連結串列或樹這樣的資料結構。
需要產生或操作圖象或圖形使用者介面。
需要直接存取系統硬體。
需要埠號或是socket I/O。
需要使用可重用的函式庫或介面。
所有的私有的不開源的應用程式(Shell指令碼的原始碼是直接可讀,能被所有人看到的)

相關文章