在编写 Shell 脚本时,很多隐蔽问题并非来自逻辑,而是执行行为失控。本文将带你系统了解 set 命令的核心用法,帮你写出更安全、更可靠的 Linux 脚本。
一、set 命令是干什么的?
简单来说:set 用来修改 shell 的行为模式。
出错时是否退出
变量未定义是否报错
命令是否打印执行过程
因此,set 更多出现在脚本开头,而不是交互式命令中。二、最常用的 set 参数
1️⃣ set -e:出错就退出
set -ecp file1 /tmp/rm not_exist_file echo "done" # 由于前面的错误,本行并不会输出
一旦某条命令执行失败,脚本立即退出,后续命令不再执行。2️⃣ set -u:未定义变量直接报错
set -uecho $VAR # 这里会报错:VAR: parameter not set
3️⃣ set -x:打印执行过程(调试神器)
执行时会打印每一条实际运行的命令,非常适合排查问题。4️⃣ set -o pipefail:管道失败即失败
set -o pipefailcat not_exist_file | grep "test"
三、组合使用才是最佳实践
四、一个简单示例对比
#!/bin/bashcp file1 /tmp/rm not_exist_fileecho "finish" # 本行会执行
#!/bin/bashset -euo pipefailcp file1 /tmp/rm not_exist_fileecho "finish" # 本行不会执行,由于上面的报错
五、使用 set 的几点建议
生产脚本优先使用 set -euo pipefail六、写在最后
它不是让脚本“跑得更快”,而是让脚本更安全、更可预测。那么学会并用好 set,是你迈向成熟 Linux 使用者的重要一步。