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"

posted on 2022-03-25 09:41  开心种树  阅读(111)  评论(0编辑  收藏  举报