Shell 脚本里容易忽略的三个健壮性细节

举报
yd_276656611 发表于 2026/11/14 10:00:19 2026/11/14
【摘要】 本文介绍 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)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。