shell——调试
1. 基本调试方法
set -v : 显示已经运行的脚本
set -x : 显示debug
set -e : 报错则退出
2. 封装调试函数
将 vxe 封装成函数,可以 一键开关 调试信息
#!/bin/bash
DEBUG=true
function debug()
{
if [ "$DEBUG" == "true" ]; then
if [ "$1" == "on" -o "$1" == "ON" ]; then
set -x
elif [ "$1" == "off" -o "$1" == "OFF" ]; then
set +x
fi
fi
}
debug on
echo "111111"
debug off
echo "2222222"
3. 另一种debug
DEBUG()
{
if [ "$DEBUG" == "true" ]; then
# 把接受的参数当作命令执行
$@
fi
}
DEBUG echo "1111"
如此可以把 debug 相关命令 当 DEBUG 函数参数,方便控制开关。
4. trap 的使用
除了上面 处理 系统信号,trap还能处理 bash 的伪信号
除了系统产生信号,shell会产生3个为信号
4.1 追踪函数返回结果
希望找到出错函数,但shell的函数太多,所以可以利用ERR信号
###################################################
#
# 利用trap捕捉 返回非0的函数调用或命令执行
#
function ERRTRAP()
{
echo "[LINE:$1] Error : Command or function exited with status $?"
}
function fun_with_fail()
{
return 1
}
function fun_with_succed()
{
return 0
}
# 命令或函数每一个错误都产生一个ERR伪信号
# 利用trap 捕获ERR伪信号
trap 'ERRTRAP $LINENO' ERR
# 模拟一个失败的命令
command_not_exist 2>/dev/null
# 模拟一个失败的函数
fun_with_fail
# 模拟一个成功的函数
fun_with_succed
4.2 追踪变量的值
###################################################
#
# 捕获DEBUG信号,对全局变量进行追踪
#
trap 'echo "before execute line : $LINENO, a = $a, b = $b, c = $c"' DEBUG
a=1
if [ "$a" -eq 1 ]; then
b=2
else
b=1
fi
c=3
echo "end"