Shell程序的調試是通過運行程序時加入相關調試選項或在腳本程序中加入相關語句,讓shell程序在執行過程中顯示出一些可供參考的“調試信息”。當然,用戶也可以在shell程序中的適當位置加入一些echo命令用於調試與跟蹤。
方法一:在運行腳本程序時加入調試選項:
【用法】bash –選項 ./shellScript.sh
幾個常用的調試選擇項如下:
-e :如果一個命令返回一個非0退出狀態值(失敗),就退出。
-n : 不需要執行腳本只是檢查語法結構,返回所有的語法錯誤信息。
-u : 置換時把未設置的變量看作出錯。
-v : 當讀入shell輸入行時,把它們顯示出來。
-x : 執行命令時,把命令和它們的參數顯示出來。
方法二:在腳本程序中通過set命令調試程序:
【用法】set –選項, set +選項 #set命令的常用選項同上
以在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時則顯示出經過替換後的命令行的內容。
【例子】
./iftest.sh:
#! /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 ..
方法一運行結果:
bash -v ./iftest.sh
bash -x ./iftest.sh
注:$#=1 $1=..
方法二運行結果:
取消iftest.sh程序中的注釋,並且只選擇set -x 和 set +x命令,表明只對第二個if..fi語句塊進行調試。
./iftest.sh