因為 Shell 似乎是各 UNIX 系統(tǒng)之間通用的功能,并且經過了 POSIX 的標準化。因此,Shell 腳本只要“用心寫”一次,即可應用到很多系統(tǒng)上。因此,之所以要使用 Shell 腳本是基于:
- 簡單性:Shell 是一個高級語言;通過它,你可以簡潔地表達復雜的操作。
- 可移植性:使用 POSIX 所定義的功能,可以做到腳本無須修改就可在不同的系統(tǒng)上執(zhí)行。
- 開發(fā)容易:可以在短時間內完成一個功能強大又妤用的腳本。
但是,考慮到 Shell 腳本的命令限制和效率問題,下列情況一般不使用 Shell:
- 資源密集型的任務,尤其在需要考慮效率時(比如,排序,hash 等等)。
- 需要處理大任務的數(shù)學操作,尤其是浮點運算,精確運算,或者復雜的算術運算(這種情況一般使用 C++ 或 FORTRAN 來處理)。
- 有跨平臺(操作系統(tǒng))移植需求(一般使用 C 或 Java)。
- 復雜的應用,在必須使用結構化編程的時候(需要變量的類型檢查,函數(shù)原型,等等)。
- 對于影響系統(tǒng)全局性的關鍵任務應用。
- 對于安全有很高要求的任務,比如你需要一個健壯的系統(tǒng)來防止入侵、破解、惡意破壞等等。
- 項目由連串的依賴的各個部分組成。
- 需要大規(guī)模的文件操作。
- 需要多維數(shù)組的支持。
- 需要數(shù)據結構的支持,比如鏈表或數(shù)等數(shù)據結構。
- 需要產生或操作圖形化界面 GUI。
- 需要直接操作系統(tǒng)硬件。
- 需要 I/O 或 socket 接口。
- 需要使用庫或者遺留下來的老代碼的接口。
- 私人的、閉源的應用(shell 腳本把代碼就放在文本文件中,全世界都能看到)。
如果你的應用符合上邊的任意一條,那么就考慮一下更強大的語言吧——或許是 Perl、Tcl、Python、Ruby ——或者是更高層次的編譯語言比如 C/C++,或者是 Java。即使如此,你會發(fā)現(xiàn),使用 shell 來原型開發(fā)你的應用,在開發(fā)步驟中也是非常有用的。