發表於
2016/4/27 0:03:30
1693
人閱讀
分類: shell
除錯功能是每一門程式語言都應該實現的重要特性,每個系統程式設計師都應該了解bash的除錯選項;
1.使用選項-x,啟動shell指令碼的跟蹤除錯功能,將執行的每一條命令和輸出的結果輸出;
test.sh檔案
#!/bin/bash
foriin ;
do echo $i
done
echo "script executed"
正常執行
[pengchengxiang@localhost ~]$ bash test.sh
1 2
… …
script executed
除錯執行
[pengchengxiang@localhost ~]$ bash -x test.sh
+ foriin ''
+ echo 1
1 + foriin ''
+ echo 2
2 … …
+ echo 'script executed'
script executed
2.使用set -x和set +x對指令碼進行部分除錯,將指令碼執行的每一行輸出到stdout;
test.sh檔案
#!/bin/bash
foriin ;
do set -x
echo $i
set +x
done
echo "script executed"
部分除錯輸出
[pengchengxiang@localhost ~]$ bash -x test.sh
+ foriin ''
+ set -x
+ echo 1
1 + set +x
+ echo 2
2 … …
script executed
3.使用自定義格式顯示顯示資訊,通過傳遞_debug環境變數來建立除錯風格;
test.sh檔案
done echo "script executed"正常執行,不輸出debug日誌資訊#!/bin/bash
function debug()
foriin ;
do debug echo $i #可以看到執行debug函式時,可以理解為函式引數是echo $i,那麼$@就是函式引數echo $i,也就是說如果如果
#[ "$_debug" == "on" ] 則 echo $i,否則 :,即啥也不做
[pengchengxiang@localhost ~]$ ./test.sh
script executed
debug模式執行,輸出debug日誌資訊
[pengchengxiang@localhost ~]$_debug=on ./test.sh
1 2
3 4
5 6
script executed
4.你也可以在#!/bin/bash -xv,這樣就可以不使用任何選項就可以啟動除錯功能了;
test.sh檔案
#!/bin/bash -xv
function debug()
foriin ;
do debug echo $i
done
echo "script executed"
不新增選項,直接執行 【注意:這種在/bin/bash 後指定 -xv的,只有使用./***x.sh的方式才可以看到除錯資訊,使用sh ***x.sh看不到除錯】
[pengchengxiang@localhost ~]$./test.sh
#!/bin/bash -xv
function debug()
foriin ;
do debug echo $i
done
+ foriin ''
+ debug echo 1
+ '[' '' == on ']'
+ :
… …
echo "script executed"
+ echo 'script executed'
script executed
Shell 指令碼除錯
除錯功能是每一門程式語言都應該實現的重要特性,每個系統程式設計師都應該了解bash的除錯選項 1.使用選項 x,啟動shell指令碼的跟蹤除錯功能,將執行的每一條命令和輸出的結果輸出 test.sh檔案 bin bash foriin do echo i done echo script execu...
除錯shell指令碼
遇見莫名其妙的錯誤,先dos2uinux指令碼。echo命令是最有用的除錯指令碼工具之一。一般在可能出現問題的指令碼前後加入echo命令 使用bash命令引數進行除錯 引數 n 不會執行該指令碼,僅查詢指令碼語法是否有問題,並給出錯誤提示。v 在執行指令碼時,先將指令碼的內容輸出到螢幕上然後執行指令...
shell指令碼除錯
我們在使用unix like系統時,shell程式設計是必不可少的,在編寫shell指令碼的時候也不可避免會產生bug,所以我們就需要學習shell指令碼的除錯方法.何為直接除錯,相信大家在編寫c c 程式除錯時候都經常會在程式中加乙個printf用來輸出中間值達到除錯的效果.當然,在shell指令...