shell调试技巧

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

shell调试技巧

  • 示例二
#!/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"   

shell调试技巧

  • 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]}} '
上一篇:TEE Internal core API介绍(globalplatform)


下一篇:[答疑]-中断流程举例:在TEE侧时产生了FIQ,回到REE后为啥又产生了IRQ