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   开心种树  阅读(121)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示