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