linux shell脚本调试应启用内置模式(-x/-v)、静态检查(-n)、严格变量校验(-u),结合分段日志与shellcheck工具,精准定位语法、变量及执行问题。

Linux Shell脚本调试不靠猜,靠工具和方法。最直接有效的是启用内置调试模式,配合日志输出和分段验证,快速定位语法错误、变量未定义、命令执行失败等问题。
用 -x 和 -v 参数看脚本怎么跑
Shell 提供了两个常用调试开关:
- -x:显示每条实际执行的命令(含变量展开后的内容),适合查逻辑跳转和参数拼接问题;
- -v:显示原始脚本行(未展开变量),适合检查语法结构是否写错。
运行方式:bash -x ./script.sh 或在脚本首行加 #!/bin/bash -x。也可以动态开启关闭:set -x 启动,set +x 关闭,方便只调试某一段。
检查语法错误和变量使用
语法错误常在运行前就卡住,可用 bash -n script.sh 静态检查(不执行,只解析)。变量相关问题高频出现在:
- 忘记用 $ 引用变量(如写成 echo USER 而非 echo $USER);
- 变量为空导致命令异常(例如 rm -rf $DIR/* 中 $DIR 为空会删当前目录);
- 未声明但引用的变量——用 set -u 可让脚本在遇到未定义变量时立即报错退出。
分段执行 + 日志辅助定位
大脚本别从头硬跑。把关键步骤拆开,用 echo "DEBUG: step X done" 或 logger 记录状态。更稳妥的做法是重定向输出:./script.sh > debug.log 2>&1,再结合 tail -f debug.log 实时观察。对条件分支,可在 if/else 前加 echo "In if branch, VAR=$VAR" 确认进入路径。
用 shellcheck 工具提前避坑
shellcheck 是专为 Shell 脚本设计的静态分析工具,能指出潜在 bug、危险写法(如未引号包裹的变量)、可移植性问题等。安装后直接运行 shellcheck script.sh,它会给出带解释的建议。比如提示 SC2086: Double quote to prevent glob expansion,就是在提醒你该给 $VAR 加双引号。










