任何一種程式語言都有其最適用的情況及其罩門,Unix shell Programming 也 難逃此宿命。它有幾項優點:

1. Script 都是純文字檔,不被特定軟體綁住

大部分的檔案都是以文字檔存放,這是非常開放的系統,檔案之間的分享 非常方便,一個程式所產生的檔案很容易為其他程式使用,一個程式 在使用其他程式所產生的檔案時,也不需知道是何種程式所產生的。 比起現行個人電腦視窗系統上的各種使用專屬格式的應用程式而言, 方便很多。

2. 不需編譯,非常容易移植到不同的 Unix 系統下執行

shell/awk/sed/ex/perl script 都是純文字檔,也不需 編譯即可使用,非常方便,從一個系統移植到另一系統時,直接 搬過去即可,雖然可能要更動有些系統設定,但是因為不需重新 編譯,可省下不少麻煩。

3. 適合用於開發簡易小軟體

很多script 長度很短也很簡單,是所謂的 "little program"。 當設計一個專供個人使用的 script時, 幾乎不需另外寫使用手冊,直接看script 就可以瞭解其用法。 要維護也很簡單,不需撰寫複雜的維護手冊或設計手冊。 當然,如果是要寫一個供公眾使用的 script 時,這些囉唆的 額外工作還是要按部就班去做的。

4. 因開發耗時極短,玩家可隨時根據自己的需求動手開發或更改

如果是專供個人使用的 Script,當然可以隨意的根據自己的需要設計, 反之,如果是使用他人提供的程式時,不但無法完全符合個人需求, 使用者還須花時間去尋找適用程式,更須花時間去 K 使用手冊。 很多時候,還不如自己寫個 shell script,不但更省時間, 也更符合自己的需求。

 
 
缺點當然是免不了:

1. 執行效率較差

Shell 因為是用 Interpreter 而且是用間接的方式達到目的 (除了程序控制的指令之外,大部分都是叫用 UNIX 的既有程式來執行), 其執行效率不佳。例如,前面所舉的數字產生器,如果是用head, cat, cut 去組合成的話,因為這三個指令是三個不同的程式,呼叫起來要耗費 相當長的時間 (豪秒範圍), 比傳統的 C/C++/Java 的迴圈方式慢很多。 可是,話說回來,終端機前的使用者對於0.001 秒與數秒的反應時間 根本無法察覺差異,即使可以察覺差異,差別也不大。 反而是構思與程式設計所花時間較長, shell script 的設計通常可以省下數小時甚至數天的設計時間, 那差別可大了。程式的執行時間雖然長了數秒鐘,但可節省數小時 的設計時間,對於個人使用的小程式而言,這筆買賣太划算了。

2. 力有未逮之時

Shell 畢竟不是傳統的 general purpose 的程式語言, 有些事是做不到或很難做的,例如,在shell裡進行數學運算 就很麻煩,所以不可能作為大型軟體 的主要開發語言。所幸,後來發明的 perl 程式語言融合了 shell script 及傳統程式語言的優點,其能力已經不下於傳統的 程式語言,現在很多大型公用軟體都是使用perl去撰寫的。

此外,shell script 可以很方便的處理文字檔,但對於非文字檔 及多媒體檔等就很不方便,例如處理微軟的 Winword 所產生的 doc 檔,那就無能為力了。在處理多媒體檔案時,常需用到硬體的 驅動程式,而不幸的是,系統不一定有提供驅動程式的介面。

3. 漏洞難免

由於設計給個人用的程式不免為了省時省事而忽略了很多 意外的處理,使用不慎時會有嚴重後果,必須非常小心,尤其是 當script 有涉及檔案的更動時,更須特別小心。 話說回來,如果設計用完即丟的小程式時也要將所有意外情況都考慮清楚, 那也省不了多少設計時間,也就失去了原有 little programming 的立意。 有得必有失,得失之取捨,得由使用者視情況決定。

#2 Fast tool building
#2 Robust
#2 ASCII files 
#3 Interoperability
#3 Portable
#3 Sharable (in NFS)
#3 Easy to maintain/understand
#3 Little documentation overhead
#3 Save storage space
#2 No learning time, no need to read manual
#2 Know all the shortcomings
#
#.bp bad Bad Problems
#2 Resource Intensive 
#3 consume many processes and I/O
#3 Slow 
#2 Not a general purpose programming language
#2 May not cover all exceptions 
#3 trade-off between coding time and robustness
Web Page Copyright: 國立政治大學資訊科學系 連耀南 lien@cherry.cs.nccu.edu.tw  Good.htm,  Thu Nov 7 02:23:41 CST 2013