如何調試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 條件斷點

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章