使用者可以用任何編輯程式來編寫Shell程式。因為Shell程式是解釋執行的,所以不需要編譯成目的程式。按照Shell編程的慣例,以 bash為例,程式的第一行一般為“#!/bin/bash”,其中 # 表示該行是注釋,歎號 ! 告訴Shell運行歎號之後的命令並用文檔的其餘部分作為輸入,也就是運行/bin/bash並讓/bin/bash去執行Shell程式的內容。
執行Shell程式的方法有3種。
1.sh Shell程式檔案名稱
這種方法的命令格式為:
bash Shell程式檔案名稱
這實際上是調用一個新的bash命令解釋程式,而把Shell程式檔案名稱作為參數傳遞給它。新啟動的Shell將去讀指定的檔案,可執行檔中列出的命令,當所有的命令都執行完後結束。該方法的優點是可以利用Shell調試功能。
2.sh
格式為:
bash< Shell程式名
這種方式就是利用輸入重新導向,使Shell命令解釋程式的輸入取自指定的程式檔案。
3.用chmod命令使Shell程式成為可執行檔
一個檔案能否運行取決於該文檔的內容本身可執行且該檔案具有執行權。對於Shell程式,當用編輯器產生一個檔案時,系統賦予的許可權都是644(rw-r-r--),因此,當使用者需要運行這個檔案時,只需要直接鍵入檔案名稱即可。
在這3種運行Shell程式的方法中,最好按下面的方式選擇:當剛建立一個Shell程式,對它的正確性還沒有把握時,應當使用第一種方式進行 調試。當一個Shell程式已經調試好時,應使用第三種方式把它固定下來,以後只要鍵入相應的檔案名稱即可,並可被另一個程式所調用。
4.bash程式的調試
在編程過程中難免會出錯,有的時候,偵錯工具比編寫程式花費的時間還要多,Shell程式同樣如此。
Shell程式的調試主要是利用bash命令解釋程式的選擇項。調用bash的形式是:
bash -選擇項Shell程式檔案名稱
幾個常用的選擇項是:
-e 如果一個命令失敗就立即退出。
-n 讀入命令但是不執行它們。
-u 置換時把未設定的變數看做出錯。
-v 當讀入Shell輸入行時把它們顯示出來。
-x 執行命令時把命令和它們的參數顯示出來。
上面的所有選項也可以在Shell程式內部用“set -選擇項”的形式引用,而“set +選擇項”則將禁止該選擇項起作用。如果只想對程式的某一部分使用某些選擇項時,則可以將該部分用上面兩個語句包圍起來。
(1)未置變數退出和立即退出
未置變數退出特性允許使用者對所有變數進行檢查,如果引用了一個未賦值的變數就終止Shell程式的執行。Shell通常允許未置變數的使用,在 這種情況下,變數的值為空白。如果設定了未置變數退出選擇項,則一旦使用了未置變數就顯示錯誤資訊,並終止程式的運行。未置變數退出選擇項為-u。
當Shell運行時,若遇到不存在或不可執行檔命令、重新導向失敗或命令非正常結束等情況時,如果未經重新定向,該出錯資訊會顯示在終端螢幕上, 而Shell程式仍將繼續執行。要想在錯誤發生時迫使Shell程式立即結束,可以使用-e選項將Shell程式的執行立即終止。
(2)Shell程式的跟蹤
調試Shell程式的主要方法是利用Shell命令解釋程式的-v或-x選項來跟蹤程式的執行。-v選擇項使Shell在執行程式的過程中,把 它讀入的每一個命令列都顯示出來,而-x選擇項使Shell在執行程式的過程中把它執行的每一個命令在行首用一個+加上命令名顯示出來。並把每一個變數和 該變數所取的值也顯示出來。因此,它們的主要區別在於:在執行命令列之前無-v,則顯示出命令列的原始內容,而有-v時則顯示出經過替換後的命令列的內 容。
除了使用Shell的-v和-x選擇項以外,還可以在Shell程式內部採取一些輔助調試的措施。例如,可以在Shell程式的一些關鍵地方使 用echo命令把必要的資訊顯示出來,它的作用相當於C語言中的printf語句,這樣就可以知道程式運行到什麼地方及程式目前的狀態。