由于shell语言是一门解释型语言,不同于java等的编译语言,它是由上倒下的执行,对于我们写的一些代码,需要进行错误调试.
常见的方式有:1.sh -n +可执行的脚本2.sh -x +可执行的脚本3.可以在脚本中增加一个sleep.
4.使用调试工具:-bashdb.具体做法:
该工具默认未安装,当前最新版本为:4.4-0.92,下载目录:http://bashdb.sourceforge.NET/
1). 如果是ubuntu系统,直接用apt-get来安装
apt-get install bashdb
2). 如果是Centos等版本,使用windows下载后,编译,安装,大致步骤如下:
下载:https://sourceforge.net/projects/bashdb/files/bashdb/
[root@hadoop007 ~]# tar -xzvf bashdb-4.4-0.92.tar.gz-C /usr/src
[root@hadoop007 ~]# cd/usr/src/bashdb-4.4-0.92
[root@hadoop007 ~]# ./configure
[root@hadoop007 ~]# make install
调试实例:
vi /home/test1.sh
#!/bin/bash
echo"----------------begin-----------------"
MAX=3
for ((i = 0; i < MAX; i++))
do
nowdate=`date -d"-$i day" +%Y-%m-%d`
echo $nowdate
done
echo"----------------end-----------------"
调试命令:
./bashdb --debugger /home/test.sh
[root@hadoop007 bashdb-4.4-0.92]# ./bashdb--debugger /home/test.sh
bash debugger, bashdb, release 4.4-0.92
Copyright 2002, 2003, 2004, 2006-2012, 2014Rocky Bernstein
This is free software, covered by the GNUGeneral Public License, and you are
welcome to change it and/or distributecopies of it under certain conditions.
(/home/test.sh:3):
3: echo"----------------begin-----------------"
bashdb<0> n #执行下一条语句
----------------begin-----------------
(/home/test.sh:4):
4: MAX=3
bashdb<1> l #列出当前行上下各5行,总共10行
1: #!/bin/bash
2:
3: echo"----------------begin-----------------"
4:=> MAX=3
5: for ((i = 0; i < MAX;i++))
6: do
7: nowdate=`date -d"-$iday" +%Y-%m-%d`
8: echo $nowdate
9: done
10: echo "----------------end-----------------"
bashdb<2> b 7 #在行号为7的行设置断点
Breakpoint 1 set in file /home/test.sh,line 7.
bashdb<3> c #继续运行
Breakpoint 1 hit (1 times).
(/home/test.sh:7):
7: nowdate=`date -d"-$i day"+%Y-%m-%d`
bashdb<4> print $i
0
bashdb<5> n
(/home/test.sh:8):
8: echo $nowdate
bashdb<6> print $nowdate
2017-03-20
bashdb<7> c 10 #单步往下运行10步
One-time breakpoint 2 set in file/home/test.sh, line 10.
2017-03-20
Breakpoint 1 hit (2 times).
(/home/test.sh:7):
7: nowdate=`date -d"-$i day"+%Y-%m-%d`
bashdb<8> finish #运行到结束
Breakpoint 1 hit (3 times).
(/home/test.sh:7):
7: nowdate=`date -d"-$i day"+%Y-%m-%d`
date -d"-$i day" +%Y-%m-%d
bashdb<(9)> finish
2017-03-19
Breakpoint 1 hit (4 times).
(/home/test.sh:7):
7: nowdate=`date -d"-$i day"+%Y-%m-%d`
bashdb<10> finish
Breakpoint 1 hit (5 times).
(/home/test.sh:7):
7: nowdate=`date -d"-$i day"+%Y-%m-%d`
date -d"-$i day" +%Y-%m-%d
bashdb<(11)> finish
2017-03-18
(/home/test.sh:10):
10: echo"----------------end-----------------"
bashdb<12> q #退出
bashdb: That's all, folks...
【常用命令】
l 列出当前行上下各5行,总共10行
q|quit 退出
h 帮助
/for/ 向后搜索字符串for
?for? 向前搜索字符串for
x 1+2 计算算术表达式的值
!! ls -laRt 执行shell命令
n 执行下一条语句
s 4 单步执行4次,如遇到函数则进入函数里面
b 4 在行号4处设置断点
del 4 删除行号为4的断点
c 10 一直执行到行号10处
R|run 重新执行当前调试脚本
finish 执行到程序最后