您的位置:首页 > 运维架构 > Shell

如何调试Shell脚本

2011-12-08 20:08 239 查看
http://www.douban.com/note/161255051/

如何调试Shell脚本

1) 检查语法错误:

一般来说我们可以通过修改shell脚本的源代码,令其输出相关的调试信息来定位错误,那有没有不修改源代码来调试shell脚本的方法呢?答案就是使用shell的执行选,下面是一些常用选项的用法:

-n 只读取shell脚本,但不实际执行

-x 进入跟踪方式,显示所执行的每一条命令

-c "string" 从strings中读取命令

“-n”可用于测试shell脚本是否存在语法错误,但不会实际执行命令。在shell脚本编写完成之后,实际执行之前,首先使用“-n”选项来测试脚本是否存在语法错误是一个很好的习惯。因为某些shell脚本在执行时会对系统环境产生影响,比如生成或移动文件等,如果在实际执行才发现语法错误,您不得不手工做一些系统环境的恢复工作才能继续测试这个脚本。

“-c”选项使shell解释器从一个字符串中而不是从一个文件中读取并执行shell命令。当需要临时测试一小段脚本的执行结果时,可以使用这个选项,如下所示:

sh -c 'a=1;b=2;let c=$a+$b;echo "c=$c"'

"-x"选项可用来跟踪脚本的执行,是调试shell脚本的强有力工具。“-x”选项使shell在执行脚本的过程中把它实际执行的每一个命令行显示出来,并且在行首显示一个"+"号。 "+"号后面显示的是经过了变量替换之后的命令行的内容,有助于分析实际执行的是什么命令。 “-x”选项使用起来简单方便,可以轻松对付大多数的shell调试任务,应把其当作首选的调试手段。

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处设置断点

del 行号n 撤销行号n处的断点

c 行号n 一直执行到行号n处

R 重新启动

Finish 执行到程序最后

cond n expr 条件断点
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: