標籤:shell 調試
方法一:在運行指令碼程式時加入調試選項:
【用法】bash –選項./shellScript.sh
-e :如果一個命令返回一個非0退出狀態值(失敗),就退出。
-n : 不需要執行指令碼只是檢查文法結構,返回所有的語法錯誤資訊。
-u : 置換時把未設定的變數看作出錯。
-v: 當讀入shell輸入行時,把它們顯示出來。
-x: 執行命令時,把命令和它們的參數顯示出來。
方法二:在指令碼程式中通過
以在Shell程式內部用“set -選擇項”的形式引用,而“set +選擇項”則將禁止該選擇項起作用。如果只想對程式的某一部分使用某些選擇項時,則可以將該部分用上面兩個語句包圍起來。
(1)未置變數退出(-u)和立即退出(-e)
未置變數退出特性允許使用者對所有變數進行檢查,如果引用了一個未賦值的變數就終止Shell程式的執行。Shell通常允許未置變數的使用,在這種情況下,變數的值為空白。如果設定了未置變數退出選擇項,則一旦使用了未置變數就顯示錯誤資訊,並終止程式的運行。未置變數退出選擇項為-u。
當Shell運行時,若遇到不存在或不可執行檔命令、重新導向失敗或命令非正常結束等情況時,如果未經重新定向,該出錯資訊會顯示在終端螢幕上, 而Shell程式仍將繼續執行。要想在錯誤發生時迫使Shell程式立即結束,可以使用-e選項將Shell程式的執行立即終止。
(2)Shell程式的跟蹤(-v或-x)
調試Shell程式的主要方法是利用Shell命令解釋程式的-v或-x選項來跟蹤程式的執行。-v選擇項使Shell在執行程式的過程中,把它讀入的每一個命令列都顯示出來,而-x選擇項使Shell在執行程式的過程中把它執行的每一個命令在行首用一個+加上命令名顯示出來。並把每一個變數和該變數所取的值也顯示出來。因此,它們的主要區別在於:在執行命令列之前無-v,則顯示出命令列的原始內容,而有-v時則顯示出經過替換後的命令列的內容。
【例子】
#! /bin/bash
iftest(){
if [ $# -ne 1 ]
then
echo " Usage: $0 dir >"
exit 1
fi
# set -v or set -x #若選擇方法二,則取消注釋,並選擇其中一個set命令
if [ -d " $1 >" ]
then
ls -l $1
exit 0
fi
# set +v or set +x #若選擇方法二,則取消注釋,並選擇其中一個set命令
echo " Warn:$1 is not a directory! >"
exit 2
}
iftest ..
Linux Shell 程式調試