我们使用 && 运算符在前一个命令完成后运行命令。
update-system-configuration && restart-service
但是仅当上一个命令不成功时如何运行命令?
例如,如果我必须更新系统配置并且失败,我需要向系统管理员发送邮件吗?
编辑:来吧,这不是控制操作员的重复问题。这将帮助那些专门搜索这个问题的用户,我知道控制运算符的答案也会回答这个问题,但是专门搜索如何处理不成功命令的人不会直接到达那里,否则我会在问这个问题之前到达那里问题。
答案1
&&
仅当前面的命令成功时才执行后面的命令。 ||
则相反:
update-system-configuration || echo "Update failed" | mail -s "Help Me" admin@host
文档
从man bash
:
AND 和 OR 列表是由 && 和 || 分隔的多个管道之一的序列。分别控制运算符。 AND 和 OR 列表以左关联性执行。 AND 列表的形式为
command1 && command2
当且仅当 command1 返回退出状态为零时,command2 才会执行。
OR 列表的形式为
command1 || command2
当且仅当 command1 返回非零退出状态时,command2 才会执行。 AND 和 OR 列表的返回状态是列表中最后执行的命令的退出状态。
答案2
当“成功”时,您的意思是它返回0
,然后简单地测试它:
if ! <command>; then
<ran if unsuccessful>
fi
这样做的原因是因为作为标准,如果出现问题,程序应该返回非零,如果成功则返回零。
或者,您可以测试返回变量$?
:
<command>
if [ $? -ne 0 ]; then
<ran if unsuccessful>
fi
$?
保存最后一个命令的返回码。
现在,if
通常是 shell 内置命令。因此,根据您使用的 shell,您应该检查 shell 的手册页。