LinuxShell脚本报错_Shell脚本错误排查方法

5次阅读

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

LinuxShell 脚本报错_Shell 脚本错误排查方法

Shell 脚本出错很常见,关键是要快速定位问题所在。多数错误源于语法、路径、权限或变量使用不当,而不是逻辑本身。

开启调试模式看执行过程

在脚本开头加上 set -x,运行时会逐行打印实际执行的命令(含变量展开后的结果),方便发现哪一步出错。调试完记得删掉或注释掉,避免生产环境暴露敏感信息。

  • 也可以临时运行:bash -x script.sh
  • 想只调试某一段,用 set -x 开启,set +x 关闭
  • 配合 set -e 可让脚本在任意命令失败时立即退出,避免错误被忽略

检查语法和基础错误

很多报错如 unexpected tokensyntax error near unexpected token 都是括号不匹配、缺少分号、if/fi 或 for/done 写漏了。

  • shellcheck script.sh 自动检测常见语法和潜在问题(推荐安装)
  • 注意空格:[$var = “ok”] 中的空格不能少,[[$var==”ok”]] 是错的
  • 引号要配对,尤其变量含空格时:“$PATH”$PATH 更安全

确认路径、权限与环境差异

脚本在本地能跑,放到服务器就报 command not foundNo such file or directory,大概率是环境不一致。

  • 用绝对路径调用命令(如 /usr/bin/python3)或在脚本开头显式设置 PATH
  • 检查脚本是否加了可执行权限:chmod +x script.sh
  • 注意换行符:Windows 编辑保存的脚本可能带 rn,导致 : command not found 错误,用 dos2unix 转换

捕获并输出错误信息

别只依赖默认报错,主动检查关键命令的退出状态,并打印上下文。

  • $? 获取上一条命令返回值,非 0 通常表示失败
  • 把标准错误重定向出来:command 2>> error.log
  • 在关键步骤后加判断:[[$? -ne 0]] && echo “ 下载失败 ” && exit 1
text=ZqhQzanResources