让Bash shell的脚本的编写更严谨
因为shell不像其他语言那么严谨,所以经常会出现写完以后执行和预期不相符的情况,下面的几个方法可以让脚本在编写阶段更完善一些
#!/usr/bin/env bash
set -u
禁止使用不存在的变量
#!/usr/bin/env bash
set -x
脚本输出结果之前,把造成结果的命令也打印出来,类似于windows cmd下的echo on
#!/usr/bin/env bash
set -e
如果脚本里面有运行失败的命令(返回值非0),Bash脚本停止执行,防止错误累积。
但是,某些命令的非零返回值可能不表示失败,或者开发者希望在命令失败的情况下,脚本继续执行下去,可以暂时调整一下开关
set +e
command1
command2
set -e
set -o pipefail
用来处理管道命令,作用和set -e 一样,保证管道命令的每个部分都必须正确执行
set命令的上面这四个参数,一般都放在一起使用。
# 写法一
set -euxo pipefail
# 写法二
set -eux
set -o pipefail
这两种写法建议放在所有 Bash 脚本的头部。
另一种办法是在执行 Bash 脚本的时候,从命令行传入这些参数。
$ bash -euxo pipefail script.sh