我正在运行club.sh
在club.sh脚本中,我在脚本下面运行。
test1.sh test2.sh test3.sh
我关心的是它应该逐个运行,如果test1失败,它将不会运行test2.sh,如果test2.sh失败,它将不会运行test3.sh
我们怎么检查?任何人都可以提出任何有用的建议。
谢谢,
答案 0 :(得分:4)
两种方法 -
首先,您可以检查每个内部脚本的退出代码(test1.sh,test2.sh,...)并决定是否继续相应 -
$?
将返回上一个命令的退出代码。如果脚本退出而没有错误,它将为0
(零)。任何不是0
的东西都可以被视为失败。所以你可以这样 -
./test1.sh # execute script
if [[ $? != 0 ]]; then exit; fi # check return value, exit if not 0
或者,您可以使用&&
bash运算符,该运算符仅在前一个命令通过时执行后续命令 -
./test1.sh && ./test2.sh && test3.sh
仅当test1.sh
返回退出代码0
(零)时才会执行test2.sh
,test3.sh
也是如此。
如果您需要在执行脚本之间进行一些日志记录或清理,第一种方法是好的,但是如果您只关心如果发生故障则执行不应该继续,那么&&
方法就是它们我建议的方式。
答案 1 :(得分:1)
执行第一个命令/脚本的返回值存储在$?
中,因此使用此值可以检查命令是否已成功执行。
试试这个:
bash test1.sh
if [ $? -eq 0 ]; then # if script succeeded
bash test2.sh
else
echo "script failed"
fi
答案 2 :(得分:1)
如果您想在命令失败时退出脚本,只需在脚本set -e
的开头添加。
#!/bin/bash
set -e
echo hello
ls /root/lalala
echo world
否则,您有两种选择。
第一个是使用&&
。例如:
echo hello && ls /some_inexistant_directory && echo world
第二个是检查每个命令后的返回值:
#!/bin/bash
echo toto
if [ "$?" != "0" ]; then
exit 1
fi
ls /root
if [ "$?" != "0" ]; then
exit 1
fi
echo world
if [ "$?" != "0" ]; then
exit 1
fi
答案 3 :(得分:0)
你只需要将下面的内容放在脚本的乞讨处:
#!/bin/bash -e