Linux Shell调试技巧讲解_Linux排查脚本报错的方法

14次阅读

Shell 脚本调试靠五种基础手段:用 bash - n 检查语法、- x 开启执行跟踪、检查 $? 状态码、变量加双引号、启用 set -euo pipefail 严格模式,可覆盖 90% 日常问题。

Linux Shell 调试技巧讲解_Linux 排查脚本报错的方法

Shell 脚本出错时,别急着重写,大多数问题靠几条基础调试手段就能快速定位。关键不是“猜”,而是让脚本自己“说话”。

用 -n 检查语法,不执行也能发现问题

这是最安全的第一步:只读脚本、不运行,专查语法硬伤。

  • 命令写法bash -n script.sh —— 报错行号直接指出缺引号、少fi、括号没闭合等
  • 比如 echo "Today's Date: $(date) 少了一个 -n 会立刻提示unexpected EOF
  • 适合在修改后、提交前或部署前做快速“体检”

用 -x 开启执行跟踪,看清每一步怎么跑的

当脚本能跑但结果不对,或者中途静默退出,-x就是你的“慢动作回放”。

  • 两种用法bash -x script.sh(临时调试)或脚本开头加set -x(局部启用)
  • 输出里每行带 + 号,显示变量实际展开值,比如+ cp /tmp/file.txt /home/user/,一眼看出路径是否拼错
  • 搭配 set +x 可关闭某段跟踪,避免信息过载

检查变量和 状态码,揪出空值与失败命令

很多报错其实不是语法问题,而是变量为空、文件不存在、命令失败却没处理。

  • [-z "$var"] 判断变量是否为空,避免 rm $file 变成rm(删当前目录)
  • 始终用双引号包裹变量:"$file" 而不是 $file,防止含空格路径被拆成多个参数
  • 执行关键命令后立刻看$?cp source dest || {echo "cp failed: $?"; exit 1;}

加防御性检查,把错误挡在发生前

与其等报错再修,不如提前拦住常见坑。

  • 创建目录前加[! -d "$dir"] && mkdir -p "$dir"
  • 读文件前加[-f "$input"] || {echo " 输入文件不存在 "; exit 1;}
  • 脚本开头加set -euo pipefail(严格模式):未定义变量、命令失败、管道中间出错都会立即终止

基本上就这些。不需要复杂 工具 -n-x$?、引号和set -euo pipefail 这五样,覆盖了 90% 的日常排查场景。

星耀云
版权声明:本站原创文章,由 星耀云 2025-12-14发表,共计883字。
转载说明:转载本网站任何内容,请按照转载方式正确书写本站原文地址。本站提供的一切软件、教程和内容信息仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。
text=ZqhQzanResources