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"
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南