如何除錯Shell指令碼

2021-07-03 00:25:40 字數 1411 閱讀 3225

如何除錯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...