快速调试 Shell 脚本,核心目标是:定位问题、减少试错、提高效率。下面按“从快到慢、从简单到专业”的方式给你一套实用方案。
set -x(强烈推荐)#!/bin/bash
set -x # 开启调试
set -e # 遇到错误立即退出(可选)
echo "start"
ls /not_exist
echo "end"
输出示例:
+ echo start
start
+ ls /not_exist
ls: cannot access /not_exist: No such file or directory
✅ 优点:
set -x
# 要调试的代码
set +x
-xbash -x script.sh
bash -xv script.sh
参数说明:
-x:打印执行命令-v:打印脚本内容#!/bin/bash
set -e
trap 'echo "Error on line $LINENO"; exit 1' ERR
PS4='+ Line ${LINENO}: '
set -x
输出示例:
+ Line 10: echo start
✅ 非常适合长脚本、复杂逻辑
echo "VAR=$VAR"
func() {
echo "func() called"
}
✅ 适合:
⚠️ 缺点:调试完要删
echo "a=$a b=$b"
if [ "$a" = "$b" ]; then
echo "equal"
fi
[ "$VAR" = "yes" ] # ✅
[ $VAR = "yes" ] # ❌
f() {
echo ">>> f() start"
set -x
# 逻辑
set +x
echo "<<< f() end"
}
✅ 标准调试模板
#!/bin/bash
set -euo pipefail
PS4='+ Line ${LINENO}: '
set -x
解释:
set -e:出错即停set -u:用未定义变量直接报错set -o pipefail:管道中任一失败即失败bashdb(类似 gdb)bashdb script.sh
功能:
⚠️ 学习成本高,不常用
✅ 调试顺序建议:
bash -x 看执行流程✅ 90% 的 Shell 脚本错误来自:
你可以直接发我:
我可以 逐行帮你定位问题并给出修改版脚本 ✅
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。