应使用 exit 而非 return 终止脚本:return 仅退出当前函数,exit 则立即终止整个进程;检测严重异常时直接 exit 非零码并输出 stderr 错误信息;配合 set -e 提升健壮性,但业务逻辑错误仍需显式 exit;用 trap 确保清理动作执行。

用 exit 命令,而不是 return —— 它能立刻终止整个脚本进程,不管当前嵌套多深。
为什么 return 不行
return 只退出当前函数,返回到上一层调用点,脚本继续运行。即使在五层嵌套的函数里 return,外层逻辑仍会继续执行,错误可能被掩盖或引发连锁问题。
正确做法:在任意深度直接 exit
只要检测到严重异常(如关键文件丢失、权限不足、服务不可达),就立即调用 exit 非零码:
- 用
exit 1(或更具体的码,如exit 10表示配置错误) - 退出前建议输出带上下文的错误信息到 stderr:
echo "FATAL: failed to read config at $CONF_PATH" >&2 - 无需层层 return 或向上抛错,
exit本身就会打断整个调用栈
配合 set -e 提升防御能力
在脚本开头加上:
#!/bin/bash set -euo pipefail
这样大多数命令失败时自动触发 exit,减少手动判断遗漏。但注意:显式 exit 仍不可替代——比如对业务逻辑错误(如校验不通过)、非命令执行类异常(如数据为空),必须靠主动 exit。
确保清理动作不被跳过
用 trap 注册 EXIT 清理,保证无论正常结束还是被 exit 中断,都能释放资源:
tmpfile=$(mktemp)trap 'rm -f "$tmpfile"' EXIT- 也可补充
INT TERM以响应 Ctrl+C 或 kill











