shell腳本調試之工具——bashdb

bash是Unix/Linux操做系統最經常使用的shell之一,它很是靈活,和awk、c++配合起來異常強大


如下使用一個測試腳原本說明使用bash調試的方法
test.shc++

[plain] view plain copy
  1. #!/bin/bash  
  2.   
  3. echo "----------------begin-----------------"  
  4.   
  5. awk '{sum+=1} END{print sum}' test.sh  
  6.   
  7. MAX=3  
  8. for ((i = 0; i < MAX; i++))  
  9. do  
  10.         loaddate=`date -d"-$i day" +%Y-%m-%d`  
  11.         echo $loaddate  
  12. done  
  13.   
  14. echo "----------------end-----------------"  

 

1. 使用bash -x

bash -x打印出腳本執行過程當中的全部語句
like:shell

$ bash -x test.sh
bash

斷點函數

+ echo ----------------begin-----------------
----------------begin-----------------
+ awk '{sum+=1} END{print sum}' 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%的需求

測試

2. set 

有的時候,咱們的腳本很是複雜,使用bash -x獲得的輸出太多,很難找到須要的信息
set 能夠進行局部調試,在須要調試的代碼以前加上「set -x」,須要調試的代碼以後加上「set +x」便可
like:
修改test.sh:
....
set -x
url

awk '{sum+=1} END{print sum}' test.shspa

set +x操作系統

.....
運行:
----------------begin-----------------
+ awk '{sum+=1} END{print sum}' test.sh
16
+ set +x
2013-03-05
2013-03-04
2013-03-03
----------------end-----------------.net

3. 使用bash調試工具bashdb(Bash Debugger)

bashdb是一個類GDB的調試工具,使用GDB的同窗使用bashdb基本無障礙
bashdb能夠運行斷點設置、變量查看等常見調試操做
bashdb須要單獨安裝
使用以下:
$ bashdb --debug test.sh            
bash debugger, bashdb, release 4.2-0.8


Copyright 2002, 2003, 2004, 2006, 2007, 2008, 2009, 2010, 2011 Rocky Bernstein
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 '{sum+=1} END{print sum}' test.sh
bashdb<1> l #列出上下共10行代碼
  1:    #!/bin/bash
  2:    
  3:    echo "----------------begin-----------------"
  4:    
  5: => awk '{sum+=1} END{print sum}' 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 #繼續運行
14
Breakpoint 1 hit (1 times).
(/home/work/code/test.sh:10):
10:             loaddate=`date -d"-$i day" +%Y-%m-%d`
bashdb<4> print $i #打印變量值
 0
 14:    echo "----------------end-----------------"

 

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處設置斷點           #########經驗證,bashdb的break設置斷點命令必須s、s、c而後到這個斷點之後,還得重新設置下一個斷點,不然不生效,===>即再次s、s、c才行###########################
del 行號n 撤銷行號n處的斷點
c 行號n 一直執行到行號n處
R  從新啓動
Finish 執行到程序最後
cond n expr 條件斷點

url:

http://blog.csdn.net/adaptiver/article/details/7054729

http://blog.csdn.net/yfkiss/article/details/8636758

相關文章
相關標籤/搜索