**大神:
bash是unix/linux作業系統最常用的shell之一,它非常靈活,和awk、c++配合起來異常強大
以下使用乙個測試指令碼來說明使用bash除錯的方法
test.sh
#!/bin/bash
echo "----------------begin-----------------"
awk ' end' test.sh
max=3
for ((i = 0; i < max; i++))
do
loaddate=`date -d"-$i day" +%y-%m-%d`
echo $loaddate
done
echo "----------------end-----------------"
這裡我新增廢話 bash -n test.sh 語法檢查
bash -x列印出指令碼執行過程中的所有語句
like:
$ bash -x test.sh
+ echo ----------------begin-----------------
----------------begin-----------------
+ awk ' end' test.sh
14+ max=3
+ (( i = 0 ))
+ (( i < max ))
++ date '-d-0 day' +%y-%m-%d
+ loaddate=2013-03-05
+ echo 2013-03-05
2013-03-05
+ (( i++ ))
+ (( i < max ))
++ date '-d-1 day' +%y-%m-%d
+ loaddate=2013-03-04
+ echo 2013-03-04
2013-03-04
+ (( i++ ))
+ (( i < max ))
++ date '-d-2 day' +%y-%m-%d
+ loaddate=2013-03-03
+ echo 2013-03-03
2013-03-03
+ (( i++ ))
+ (( i < max ))
+ echo ----------------end-----------------
----------------end-----------------
配合上注釋,bash -x基本可以滿足日常80%的需求
有的時候,我們的指令碼非常複雜,使用bash -x得到的輸出太多,很難找到需要的資訊
set 可以進行區域性除錯,在需要除錯的**之前加上「set -x」,需要除錯的**之後加上「set +x」即可
like:
修改test.sh:
....
set -x
awk ' end' test.sh
set +x
.....
執行:----------------begin-----------------
+ awk ' end' test.sh
16+ set +x
2013-03-05
2013-03-04
2013-03-03
----------------end-----------------
bashdb是乙個類gdb的除錯工具,使用gdb的同學使用bashdb基本無障礙
bashdb可以執行斷點設定、變數檢視等常見除錯操作
bashdb需要單獨安裝
使用如下:
$ bashdb --debug test.sh
bash debugger, bashdb, release 4.2-0.8
this is free software, covered by the gnu general public license, and you are
welcome to change it and/or distribute copies of it under certain conditions.
(/home/work/code/test.sh:3):
3: echo "----------------begin-----------------"
bashdb<0>
n #下一步
----------------begin-----------------
(/home/work/code/test.sh:5):
5: awk ' end' test.sh
bashdb<1>
l #列出上下共10行**
1: #!/bin/bash
2:
3: echo "----------------begin-----------------"
4:
5: => awk ' end' test.sh
6:
7: max=3
8: for ((i = 0; i < max; i++))
9: do
10: loaddate=`date -d"-$i day" +%y-%m-%d`
bashdb<2>
b 10 #第10行設定斷點
breakpoint 1 set in file /home/work/code/test.sh, line 10.
bashdb<3> c #繼續執行
14breakpoint 1 hit (1 times).
(/home/work/code/test.sh:10):
10: loaddate=`date -d"-$i day" +%y-%m-%d`
bashdb<4>
print $i #列印變數值
014: echo "----------------end-----------------"
bash指令碼除錯方法
本文全面系統地介紹了shell指令碼除錯技術,包括使用echo,tee,trap等命令輸出關鍵資訊,跟蹤變數的值,在指令碼中植入除錯鉤子,使用 n 選項進行shell指令碼的語法檢查,使用 x 選項實現shell指令碼逐條語句的跟蹤,巧妙地利用shell的內建變數增強 x 選項的輸出資訊等。一.前言...
如何除錯bash指令碼
bash 是linux作業系統的預設shell指令碼。shell是用來處理作業系統和使用者互動的乙個程式。shell的指令碼可以幫助使用者自動化地和作業系統進行互動。你也可以理解為一種指令碼式的程式設計。即然有程式設計,那麼,程式的編譯器,直譯器,偵錯程式就必不可少了,bash也一樣,但在除錯方面可...
如何除錯bash指令碼 codestorm 新浪部落格
bash 是linux作業系統的預設shell指令碼。shell是用來處理作業系統和使用者互動的乙個程式。shell的指令碼可以幫助使用者自動化地和作業系統進行互動。你也可以理解為一種指令碼式的程式設計。即然有程式設計,那麼,程式的編譯器,直譯器,偵錯程式就必不可少了,bash也一樣,但在除錯方面可...