本节主要说说shell编程的调试方法。
在shell脚本开发的过程中,随着里面结构和命令的越来越多,犯错误的机会就很大了,所以掌握一到两种调试方法很有用,当然关于shell script的调试方法我听过好几种,不过会用的也就这么几个方法。总之,十鸟在林,不如一鸟在手!^_^
1、利用bash的的“-n”“-x”选项,最简单实用
-n: 只是将脚本都读取一遍,检查是否有语法错误
用法: bash -n my_script.sh 或者在脚本里面的“#!/bin/bash -n”,下面默认是指在脚本里面中使用选项
效果: 如果有语法错误,会提示,没有检测到语法错误,则安静的退出
-x: 调试选项,显示每条语句,以“+”开头,其后的变量都经过替换了,强烈推荐,经常与trap DEBUG配合使用trap的用法后面会提到
效果:
2、使用trap命令
格式:trap '命令或者函数,数量不限' Signal
这里Signal(信号)不是指系统信号,系统信号可以通过“kill -l”查看,这里的信号值得是bash shell在命令或者函数
在执行时或者执行结束时产生的信号,常用的有
EXIT 成功执行,结束状态码为“0”
ERR 没有成功执行,结束状态码非“0”
DEBUG 用于跟踪变量的值
举例说明:
(1)ERR用法:
Error_Trap(){ #定义一个当发现错误时调用的函数
echo "[Line:$1] Error: exited with status $?"
}
trap 'Error_Trap $LINENO;exit 1' ERR #如果结束状态是ERR(也就是执行失败或者错误),就调用Error_Trap函数
#然后退出,这里$LINENO是shell的内部变量,表示行号,这里是错误的位置
Test_A(){
return 1;
}
Test_B(){
return 2;
}
Test_A
Test_B #这个函数不会被执行了,因为在发现第一个错误的时候trap提示错误后就退出了,这
#样只有第一个错误解决了,才会继续执行以便发现后面的错误,继续调试
(2)DEBUG用法
3、记录脚本执行的日志
在脚本开发和测试的时候,脚本执行结果和过程都需要注意,这里主要说如何将脚本的执行输出记录到文件中,我平时主要用tee,在shell编程技巧小结(一)中已经提到。