如果任何语句失败则退出脚本

如果任何语句失败则退出脚本

if我在 shell 脚本中使用嵌套语句。如果任何语句失败,它必须从脚本中出来,而不执行脚本中的其他部分。我尝试使用exit 1set -e

我无法使用,set -e因为我已经使用了一些grep会返回非零状态的语句。

有人可以帮助我如何在任何语句失败时停止执行脚本吗?

答案1

您仍然可以使用set -e.如果您有具体的声明预计如果失败,您只需捕获错误状态并“处理”它:

$ cat 454756.sh
#!/bin/bash
set -e
[[ 1 -eq 2 ]] || :
echo "Still got here!"
$ ./454756.sh
Still got here!

set -e将中止脚本未捕获的错误情况。否则你将无法使用if语句。

# this also still works
set -e
if /bin/false; then
    echo "nope"
else
    echo "yep"
fi

咒语|| :是一种简洁的方法来“吃掉”任何命令抛出的任何错误,当您想要使用set -e并拥有失败的特定命令时,这很方便完全没问题

另一种方法是-e在相关命令之前取消设置,然后再重置:

set -e
do_stuff
set +e
/bin/false
set -e

相关内容