shell脚本调试需开启set -x查看执行过程,用shellcheck检测语法错误,注意空格、引号、路径、权限及换行符差异,并通过$?检查命令退出状态。

Shell脚本出错很常见,关键是要快速定位问题所在。多数错误源于语法、路径、权限或变量使用不当,而不是逻辑本身。
开启调试模式看执行过程
在脚本开头加上 set -x,运行时会逐行打印实际执行的命令(含变量展开后的结果),方便发现哪一步出错。调试完记得删掉或注释掉,避免生产环境暴露敏感信息。
- 也可以临时运行:bash -x script.sh
- 想只调试某一段,用 set -x 开启,set +x 关闭
- 配合 set -e 可让脚本在任意命令失败时立即退出,避免错误被忽略
检查语法和基础错误
很多报错如 unexpected token、syntax error near unexpected token 都是括号不匹配、缺少分号、if/fi 或 for/done 写漏了。
- 用 shellcheck script.sh 自动检测常见语法和潜在问题(推荐安装)
- 注意空格:[ $var = "ok" ] 中的空格不能少,[[$var=="ok"]] 是错的
- 引号要配对,尤其变量含空格时:"$PATH" 比 $PATH 更安全
确认路径、权限与环境差异
脚本在本地能跑,放到服务器就报 command not found 或 No such file or directory,大概率是环境不一致。
- 用绝对路径调用命令(如 /usr/bin/python3)或在脚本开头显式设置 PATH
- 检查脚本是否加了可执行权限:chmod +x script.sh
- 注意换行符:Windows 编辑保存的脚本可能带 \r\n,导致 : command not found 错误,用 dos2unix 转换
捕获并输出错误信息
别只依赖默认报错,主动检查关键命令的退出状态,并打印上下文。
- 用 $? 获取上一条命令返回值,非0通常表示失败
- 把标准错误重定向出来:command 2>> error.log
- 在关键步骤后加判断:[[ $? -ne 0 ]] && echo "下载失败" && exit 1










