Shell 脚本里容易忽略的三个健壮性细节
【摘要】 本文介绍 Shell 脚本中容易忽略的三个健壮性细节:以 set -euo pipefail 让错误尽早暴露、变量展开加引号防止分词误伤、用 trap 清理临时文件,并附简短示例。
很多 Shell 脚本在自己的机器上跑得好好的,一换环境、换数据就翻车。问题往往不在逻辑,而在三个容易被忽略的健壮性细节上。
一、开头就写 set -euo pipefail
#!/usr/bin/env bash
set -euo pipefail
-e:任何命令失败就立即退出,不让错误悄悄往下传;-u:引用未定义变量就报错,避免把空值当成正常值用;-o pipefail:管道中任何一段失败,整个管道都算失败,否则false | true也会返回成功。
这三行相当于给脚本装上安全带,写在第一行,成本最低、收益最大。
二、变量永远加引号
# 不推荐:文件名带空格就会被拆成多个参数
rm $file
# 推荐:引号保护变量的完整性
rm "$file"
不加引号时,变量会按空格、通配符做拆分和展开,$file 为空时还可能误删。养成习惯:凡是展开变量,先加双引号,只有确实需要分词的场景才例外。
三、临时文件要清理
tmp=$(mktemp)
trap 'rm -f "$tmp"' EXIT
用 mktemp 创建临时文件,再用 trap ... EXIT 保证脚本无论正常结束还是中途退出,都会删除临时文件。否则 /tmp 里会越积越多,还可能被后续运行误读。
小结
set -euo pipefail 让错误尽早暴露,变量加引号防止分词误伤,trap 清理临时文件避免残留。三处细节都不难,但能把脚本从“能跑”变成“可靠”。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)