linux系统中shell脚本的调试排错debug

1、bashdb 安装
一、下载
先肯定你的bash 版本
bash --version
If your version of bash is 4.3 or higher, use folder 4.3-0-91
If your version of bash is 4.2 or higher, use folder 4.2-0.8
If your version of bash is 4.1 or higher but less than 4.2 use folder 4.1-0.5
If your version of bash is 4.0 or higher but less than 4.1 use folder 4.0-0.4
If your version of bash is 3.1 or higher and less than 4.0, use folder 3.1-0.09.
If your version of bash is 3.0 or higher but less than 3.1, use the folder 3.00-0.05.
wget https://sourceforge.net/projects ... shdb-4.1-0.5.tar.gzbash

 


二、编译
#tar zxvf  bashdb-4.1-0.5.tar.gz
#cd bashdb-4.1-0.5
#./configure
#make && make install

----------------------------------
2、调试使用


如下使用一个测试脚原本说明使用bash调试的方法
test.sh

[plain][url=]view plain[/url][url=]copy[/url]

less

  • #!/bin/bash  
  • echo "----------------begin-----------------"  
  • awk '{sum+=1} END{print sum}' test.sh  
  • MAX=3  
  • for ((i = 0; i < MAX; i++))  
  • do  
  •         loaddate=`date -d"-$i day" +%Y-%m-%d`  
  •         echo $loaddate  
  • done  
  • echo "----------------end-----------------"  



1. 使用bash -x工具

bash -x打印出脚本执行过程当中的全部语句
like:
测试

$ bash -x test.sh 
+ 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-----------------

url

配合上注释,bash -x基本能够知足平常80%的需求

spa

2. set 有的时候,咱们的脚本很是复杂,使用bash -x获得的输出太多,很难找到须要的信息
set 能够进行局部调试,在须要调试的代码以前加上“set -x”,须要调试的代码以后加上“set +x”便可
like:
修改test.sh:
....
set -x
awk '{sum+=1} END{print sum}' test.sh
set +x
.....
运行:
----------------begin-----------------
+ awk '{sum+=1} END{print sum}' test.sh
16
+ set +x
2013-03-05
2013-03-04
2013-03-03
----------------end-----------------


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.net

相关文章
相关标签/搜索