脚本调试的主要工作就是发现引发脚本错误的原因以及在脚本源
代码中定位发生错误的行,常用的手段包括分析输出的错误信息,通过在脚本中加入调试语句,
输出调试信息来辅助诊断错误,利用调试工具等。Shell脚本调试缺乏相应
的调试机制和调试工具的支持。我们主要使用命令来调试。
代码中定位发生错误的行,常用的手段包括分析输出的错误信息,通过在脚本中加入调试语句,
输出调试信息来辅助诊断错误,利用调试工具等。Shell脚本调试缺乏相应
的调试机制和调试工具的支持。我们主要使用命令来调试。
(1)echo
通过echo来定位错误的地方,因为很难确定,当代码复杂时需要大量的echo来定位,很烦琐。
(2)trap命令
基本的语法是: trap 'command' signal
shell脚本在执行时,会产生三个所谓的“伪信号”
EXIT 从一个函数中退出或整个脚本执行完毕
ERR 当一条命令返回非零状态时(代表命令执行不成功)
DEBUG 脚本中每一条命令执行之前
ERR 当一条命令返回非零状态时(代表命令执行不成功)
DEBUG 脚本中每一条命令执行之前
通过捕获EXIT信号,我们可以在shell脚本中止执行或从函数中退出时,输出某些想要 跟踪的变量的值,并由此来判断脚本的执行状态以及出错原因,其使用方法是:
trap 'command' EXIT 或 trap 'command' 0
trap 'command' EXIT 或 trap 'command' 0
例:
1 ERRTRAP()
2 {
3 echo "[LINE:$1] Error: Command or function exited with status $?"
4 }
5 foo()
6 {
7 return 1;
8 }
9 trap 'ERRTRAP $LINENO' ERR
10 abc
11 foo
2 {
3 echo "[LINE:$1] Error: Command or function exited with status $?"
4 }
5 foo()
6 {
7 return 1;
8 }
9 trap 'ERRTRAP $LINENO' ERR
10 abc
11 foo
$ sh exp1.sh
输出结果:
exp1.sh: line 10: abc: command not found
[LINE:10] Error: Command or function exited with status 127
[LINE:11] Error: Command or function exited with status 1
[LINE:10] Error: Command or function exited with status 127
[LINE:11] Error: Command or function exited with status 1
(3) tee命令,主要用过管道的情况。
(4)shell的执行选项
-n 只读取shell脚本,但不实际执行
-x 进入跟踪方式,显示所执行的每一条命令
-c "string" 从strings中读取命令
-x 进入跟踪方式,显示所执行的每一条命令
-c "string" 从strings中读取命令
“-n”可用于测试shell脚本是否存在语法错误,但不会实际执行命令
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22736841/viewspace-681251/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/22736841/viewspace-681251/