bash是Unix/Linux操作系统最常用的shell之一,它非常灵活,和awk、c++配合起来异常强大

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

  1. #!/bin/bash
  2. echo "----------------begin-----------------"
  3. awk '{sum+=1} END{print sum}' test.sh
  4. MAX=3
  5. for ((i = 0; i < MAX; i++))
  6. do
  7. loaddate=`date -d"-$i day" +%Y-%m-%d`
  8. echo $loaddate
  9. done
  10. 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-----------------

配合上注释,bash -x基本可以满足日常80%的需求

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

shell脚本调试之工具——bashdb的更多相关文章

  1. shell脚本调试技巧

    shell脚本调试之工具——bashdb http://www.cnblogs.com/itcomputer/p/5011845.html

  2. 【转】shell脚本调试(bash trap support bashdb )

    原文网址:http://zhu8337797.blog.163.com/blog/static/170617549201122512712136/ 命 令 选 项 功 能 bash –x 脚本名 回显 ...

  3. shell脚本调试

    转自:http://www.ibm.com/developerworks/cn/linux/l-cn-shell-debug/ 一. 前言 shell编程在unix/linux世界中使用得非常广泛,熟 ...

  4. Linux - Shell脚本调试方法

    Shell脚本调试选项 Shell本身提供一些调试方法选项: -n,读一遍脚本中的命令但不执行,用于检查脚本中的语法错误. -v,一边执行脚本,一边将执行过的脚本命令打印到标准输出. -x,提供跟踪执 ...

  5. 【转】Linux Shell脚本调试技术

    本文转载自:https://www.ibm.com/developerworks/cn/linux/l-cn-shell-debug/ Shell脚本调试技术 本文全面系统地介绍了shell脚本调试技 ...

  6. shell脚本调试技术_转

    转自:http://itlab.idcquan.com/linux/SHELL/727128.html 参考:https://linux.cn/article-8045-1.html 本文全面系统地介 ...

  7. Shell脚本调试技术

    http://www.ibm.com/developerworks/cn/linux/l-cn-shell-debug/ 一. 前言 shell编程在unix/linux世界中使用得非常广泛,熟练掌握 ...

  8. Shell - Shell脚本调试方法

    Shell脚本调试选项 Shell本身提供一些调试方法选项: -n,读一遍脚本中的命令但不执行,用于检查脚本中的语法错误. -v,一边执行脚本,一边将执行过的脚本命令打印到标准输出. -x,提供跟踪执 ...

  9. shell脚本调试方法

    我们开启了 Shell 脚本调试系列文章,先是解释了不同的调试选项,下面介绍如何启用 Shell 调试模式. 写完脚本后,建议在运行脚本之前先检查脚本中的语法,而不是查看它们的输出以确认它们是否正常工 ...

随机推荐

  1. GDI+中发生一般性错误的解决办法(转帖)

    今天在开发.net引用程序中,需要System.Drawing.Image.Save 创建图片,debug的时候程序一切正常,可是发布到IIS后缺提示出现“GDI+中发生一般性错误”的异常.于是开始“ ...

  2. Ibatis对日期的处理

    最近在项目中出现两种情况(因为项目比较早,经历各个版本的改动,所有设计不一致),第一种:数据库中某一字段为Date类型,对应的bean中的类型为java.util.Date,所有在对应的映射中会出现字 ...

  3. upstream 负载均衡

    首先拿一个实例来进行记录 upstream webyz {        ip_hash;        server 10.23.24.10:8026 weight=1 max_fails=2 fa ...

  4. maven_创建quickstart模板时异常

    错误信息: Could not resolve archetype org.apache.maven.archetypes:maven-archetype-quickstart:1.1 from an ...

  5. Mysql-字段类型

    首先统计所有,以表格查看 数字类型 列类型 需要的存储量 TINYINT 1 字节 SMALLINT 2 个字节 MEDIUMINT 3 个字节 INT 4 个字节 INTEGER 4 个字节 BIG ...

  6. yii2图片上传

    yii2利用自带UploadedFile上传图片 public static function uploadFile($name) { $uploadedFile = UploadedFile::ge ...

  7. BZOJ-1001 狼抓兔子 (最小割-最大流)平面图转对偶图+SPFA

    1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec Memory Limit: 162 MB Submit: 14686 Solved: 3513 [Submit][ ...

  8. POJ1088 滑雪

    Description Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Michael想知道 ...

  9. BZOJ3172 后缀数组

    题意:求出一篇文章中每个单词的出现次数 对样例的解释: 原文是这样的: a aa aaa 注意每个单词后都会换行 所以a出现次数为6,aa为3 (aa中一次,aaa中两次),aaa为1 标准解法好像是 ...

  10. Aho-Corasick算法、多模正则匹配、Snort入门学习

    希望解决的问题 . 在一些高流量.高IO的WAF中,是如何对规则库(POST.GET)中的字符串进行多正则匹配的,是单条轮询执行,还是多模式并发执行 . Snort是怎么组织.匹配高达上千条的正则规则 ...