如何调试bash脚本

来源:互联网 发布:中国网络诗歌流派 编辑:程序博客网 时间:2024/05/26 08:41

参考:

http://blog.csdn.net/wzhwho/article/details/6415197

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


1. 使用bash -x

bash -x打印出脚本执行过程中的所有语句


2. set 

有的时候,我们的脚本非常复杂,使用bash -x得到的输出太多,很难找到需要的信息
set 可以进行局部调试,在需要调试的代码之前加上“set -x”,需要调试的代码之后加上“set +x”即可
like:
修改test.sh:
....
set -x
awk '{sum+=1} END{print sum}' test.sh
set +x
.....
运行:


3. 使用bash调试工具bashdb(Bash Debugger)

bashdb是一个类GDB的调试工具,使用GDB的同学使用bashdb基本无障碍
bashdb可以运行断点设置、变量查看等常见调试操作
bashdb需要单独安装
使用如下:
$ bashdb --debug test.sh          


4. 使用日志输出


跟踪日志有时候太多了,多得都受不了,而且,输出的内容很难阅读。一般来说,我们很多时候只关心于条件表达式,变量值,或是函数调用,或是循环等。。在这种情况下,log一些感兴趣的特定的信息,可能会更好。

使用log前,我们先写一个函数:

 

[c-sharp] view plain copy
  1. _log() {  
  2. if [ "$_DEBUG" == "true" ]; then  
  3. echo 1>&2 "$@"  
  4. fi  
  5. }  

于是,你就可以在你的脚本中如下使用:

 

_log "Copying files..."


我们可以看到,上面那个_log函数,需要检查一个_DEBUG 变量,只有这个变量是真,才会真正开发输出日志。这样,你就只需要控制这个开关,而不需要删除你的debug信息。

 

$ _DEBUG= true . /example_script .sh