如何除錯shell指令碼
1) 檢查語法錯誤:
一般來說我們可以通過修改shell指令碼的源**,令其輸出相關的除錯資訊來定位錯誤,那有沒有不修改源**來除錯shell指令碼的方法呢?答案就是使用shell的執行選,下面是一些常用選項的用法:
-n 只讀取shell指令碼,但不實際執行
-x 進入跟蹤方式,顯示所執行的每一條命令
-c "string" 從strings中讀取命令
「-n」可用於測試shell指令碼是否存在語法錯誤,但不會實際執行命令。在shell指令碼編寫完成之後,實際執行之前,首先使用「-n」選項來測試指令碼是否存在語法錯誤是乙個很好的習慣。因為某些shell指令碼在執行時會對系統環境產生影響,比如生成或移動檔案等,如果在實際執行才發現語法錯誤,您不得不手工做一些系統環境的恢復工作才能繼續測試這個指令碼。
「-c」選項使shell直譯器從乙個字串中而不是從乙個檔案中讀取並執行shell命令。當需要臨時測試一小段指令碼的執行結果時,可以使用這個選項,如下所示:
sh -c 'a=1;b=2;let c=$a+$b;echo "c=$c"'
"-x"選項可用來跟蹤指令碼的執行,是除錯shell指令碼的強有力工具。「-x」選項使shell在執行指令碼的過程中把它實際執行的每乙個命令列顯示出來,並且在行首顯示乙個"+"號。 "+"號後面顯示的是經過了變數替換之後的命令列的內容,有助於分析實際執行的是什麼命令。 「-x」選項使用起來簡單方便,可以輕鬆對付大多數的shell除錯任務,應把其當作首選的除錯手段。
2) 除錯工具-bashdb
使用shell偵錯程式bashdb,這是乙個類似於gdb的除錯工具,可以完成對shell指令碼的斷點設定,單步執行,變數觀察等許多功能。
使用bashdb進行debug的常用命令
1.列出**和查詢**類:
l 列出當前行以下的10行
- 列出正在執行的**行的前面10行
. 回到正在執行的**行
w 列出正在執行的**行前後的**
/pat/ 向後搜尋pat
?pat?向前搜尋pat
2.debug控制類:
h 幫助
help 命令 得到命令的具體資訊
q 退出bashdb
x 算數表示式 計算算數表示式的值,並顯示出來
!!空格shell命令 引數 執行shell命令
使用bashdb進行debug的常用命令(cont.)
控制指令碼執行類:
n 執行下一條語句,遇到函式,不進入函式裡面執行,將函式當作黑盒
s n 單步執行n次,遇到函式進入函式裡面
b 行號n 在行號n處設定斷點
del 行號n 撤銷行號n處的斷點
c 行號n 一直執行到行號n處
r 重新啟動
finish 執行到程式最後
cond n expr 條件斷點
如何除錯Shell指令碼
如何除錯shell指令碼 1 檢查語法錯誤 一般來說我們可以通過修改shell指令碼的源 令其輸出相關的除錯資訊來定位錯誤,那有沒有不修改源 來除錯shell指令碼的方法呢?答案就是使用shell的執行選,下面是一些常用選項的用法 n 只讀取shell指令碼,但不實際執行 x 進入跟蹤方式,顯示所執...
如何除錯Shell指令碼
如何除錯shell指令碼 1 檢查語法錯誤 一般來說我們可以通過修改shell指令碼的源 令其輸出相關的除錯資訊來定位錯誤,那有沒有不修改源 來除錯shell指令碼的方法呢?答案就是使用shell的執行選,下面是一些常用選項的用法 n 只讀取shell指令碼,但不實際執行 x 進入跟蹤方式,顯示所執...
Shell 指令碼除錯
除錯功能是每一門程式語言都應該實現的重要特性,每個系統程式設計師都應該了解bash的除錯選項 1.使用選項 x,啟動shell指令碼的跟蹤除錯功能,將執行的每一條命令和輸出的結果輸出 test.sh檔案 bin bash foriin do echo i done echo script execu...