Shell 脚本健壮性指南:set -e、引号与错误处理
【摘要】 从 set -e 的陷阱、变量引用加引号到 trap 清理,整理编写可靠 Shell 脚本的常用做法和常见错误。
为什么脚本会“静默失败”
Shell 默认不会因为某条命令失败就退出,变量不加引号会被分词或通配符展开,错误输出可能被忽略。结果是脚本“看起来跑完了”,实际数据或文件已经出错。
1. 开头几行
#!/usr/bin/env bash
set -euo pipefail
-
-e:命令失败立即退出; -
rm -- "$file"文件名包含空格或通配符时,不加引号会被拆成多个参数,可能误删文件。
--还能避免文件名以-开头被当成选项。3. 用 trap 清理临时资源
tmp=$(mktemp -d) trap 'rm -rf "$tmp"' EXIT脚本异常退出时也能清理临时目录,避免残留。
4. 显式检查依赖与退出码
if ! command -v jq >/dev/null 2>&1; then echo "jq not found" >&2 exit 1 fi把错误信息输出到
stderr,并用非 0 退出码告诉调用方失败。5. 几个常见坑
set -e下grep没匹配会返回 1 导致脚本退出,可用grep ... || true或放进if;
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)