trap调试技巧一
tee调试技巧二
调试钩子
sh 执行选项调试
-
使用trap命令
shell脚本执行时会产生三个所谓的伪信号,可以使用trap命令捕获这三个“伪信号”,并输出相关的调试信息
信号名 | 产生原因 |
---|---|
EXIT | 从一个函数中退出或整个脚本执行完毕 |
ERR | 从一条命令返回非零状态时(代表命令执行不成功) |
DEBUG | 脚本中每一条命令执行之前 |
- 示例一
#!/bin/bash
ERRTRAP()
{
echo "[LINE: $1] Error: Command or function exited with status $?"
}
foo()
{
return 1;
}
trap 'ERRTRAP $LINENO' ERR
abc
foo
- 示例二
#!/bin/bash
trap 'echo "befor execute line:$LINENO, a=$a,b=$a,c=$c"' DEBUG
a=1
if [ "$a" -eq 1 ]
then
b=2
else
b=1
fi
c=3
echo "end"
-
tee调试技巧二
tee命令会从标准输入读取数据,将其内容输出到标准输出设备,同时又可将内容保存成文件。 -
示例一
ipaddr=`hostname -I|cut -d' ' -f1|tee temp.txt`
echo $ipaddr
-
调试钩子
在脚本的开发调试阶段,可以先执行export DEBUG=true命令打开调试钩子,使其输出调试信息,export DEBUG=false可以全部屏蔽
TRACE()
{
if [ "$DEBUG" = "true" ]; then
$@
fi
}
a=1
TRACE echo "a=$a"
if [ "$a" -eq 1 ]; then
echo $a
fi
-
sh 执行选项调试
-n 测试shell脚本是否存在语法错误,但不会世界之行命令
-x 进入跟中方式,显示所执行的每一条命令
-c "string" 从string中读取命令sh -c 'a=1;b=2;let c=$a+$b;echo "c=$c"'
-x 加强 默认缺省$PS4的值是“+” export PS4='+{$LINENO:${FUNCNAME[0]}} '