脚本文件如下加入set命令,可增强脚本安全性

#!/bin/bash
set -euxo pipefail

解释:

  1. -e,也可使用 -o errexit,表示如果脚本中命令执行错误则中止后面命令执行并退出,注意错误是以行计,比如管道中多个命令只有最后的命令执行错误会退出,而中间执行错误并不会退出
  2. -u,也可使用-o nounset,表示如果脚本中引用了未定义的环境变量则会提示错误而不会执行该行命令,典型的能够避免如/bin/rm -rf $MY_DIR/潜在危险
  3. -x,也可使用-o xtrace,表示在执行一行命令前先输出该行命令,常用于跟踪当前执行的命令
  4. -o pipefail,表示管道中的任何一个子命令执行失败,则认为管道执行失败,默认管道执行结果和是最后一个子命令相同。注意这里管道的一个子命令执行失败,剩下的子命令仍会执行,只是如果使用-e参数,则下一行及后面的命令不会执行

其他

-表示打开,而+表示关闭选项

参考:

http://www.ruanyifeng.com/blog/2017/11/bash-set.html

https://segmentfault.com/a/1190000019444629?utm_source=tag-newest

https://www.gnu.org/software/bash/manual/html_node/The-Set-Builtin.html