Bash中set命令的用法

Shell Liemer_Lius 123℃

参考:http://www.ruanyifeng.com/blog/2017/11/bash-set.html?utm_source=tool.lu

重用选项写法:

# 写法一
set -euxo pipefail

# 写法二
set -eux
set -o pipefail

# 写法三
$ bash -euxo pipefail script.sh

注解:

set -u:如果脚本中有变量不存在,提示【unbound variable】而终止脚本执行,起到错误保护;
set -x: 类似bash -x,执行过程中,会以+前导,显示执行过程和结果,一般用于debug脚本;
set -e: 如果shell脚本中有一条执行失败,默认是继续执行后面的命令,-e会直接在执行失败一条命令后退出脚本,避免错误累积;
set -o pipefail:如果遇到管道,set -e就可能失败,因为管道最后一条命令的返回码作为上一条命令总体的返回码,-o pipefail可以杜绝这一问题;

示例:

#!/bin/bash
# set -x                           # Debug时候打开
# set -e                           # 测试错误命令保护
# set -u                           # 测试错误变量保护
# set -o pipefail                  # 测试错误管道保护
# foo="My world."                  # 测试变量
echo ${foo}                        # 测试管道
function mee() {
    echo "Big day."
}
mee| xargs -i echo {}
ls /etc/passwordddd                # 测试命令
echo "This is a test script."

注意:set -o pipefail 和set -e应配合使用,否则起不到管道中有问题就直接退出脚本的作用。

转载请注明:skelchina.com » Bash中set命令的用法

喜欢 (3)