/ code-snippet  

Shell Code Snippet

set

#!/usr/bin/env bash

set -o errexit #等价 set -e。只要发生错误,就终止执行。认为非0就是错误。
set +o nounset # 等价 set +u。遇到不存在的变量不报错。默认如此。
set -o pipefail # 只要一个子命令失败,整个管道命令就失败,脚本就会终止执行。
set -o xtrace # 等价 set -x。在运行结果之前,先输出执行的那一行命令,调试复杂的脚本是很有用。
set -o errexit
set -o nounset
set -o pipefail
set -o xtrace

# 4合1
set -euxo pipefail
## 写法二
set -eux
set -o pipefail

# 或者执行命令时
bash -euxo pipefail script.sh

如果脚本里面有运行失败的命令(返回值非 0),Bash 默认会继续执行后面的命令。

实际开发中,如果某个命令失败,往往需要脚本停止执行,防止错误累积。这时,一般采用下面的写法:

command || exit 1

上面的写法表示只要 command 有非零返回值,脚本就会停止执行。

如果停止执行之前需要完成多个操作,就要采用下面三种写法:

# 写法一
command || { echo "command failed"; exit 1; }

# 写法二
if ! command; then echo "command failed"; exit 1; fi

# 写法三
command
if [ "$?" -ne 0 ]; then echo "command failed"; exit 1; fi

如果两个命令有继承关系,只有第一个命令成功了,才能继续执行第二个命令,那么就要采用下面的写法:

command1 && command2

References

– EOF –