Bash:如果命令 1 失败,则运行命令 2

Bash:如果命令 1 失败,则运行命令 2

我想做这样的事情:

if cmd1 && cmd2
echo success
else
echo epic fail
fi

我该怎么做呢?

答案1

这些应该可以满足您的需要:

cmd1 && cmd2 && echo success || echo epic fail

或者

if cmd1 && cmd2; then
    echo success
else
    echo epic fail
fi

答案2

问题中的伪代码与问题标题不对应。

如果有人需要真正知道如果命令 1 失败如何运行命令 2,这是一个简单的解释:

  • cmd1 || cmd2:这将运行cmd1,如果失败它也会运行cmd2
  • cmd1 && cmd2:这将运行cmd1,如果成功它将运行cmd2
  • cmd1 ; cmd2:这将运行cmd1,然后它将运行cmd2,与运行的失败或成功无关cmd1

为了完整起见,在您的示例中您错过了then关键字。您尝试显示的代码将写为

if cmd1 && cmd2; then echo success; else echo epic fail; fi

这相当于

((cmd1 && cmd2) && echo success) || echo epic fail

括号是可选的,因为左结合性

注意,这些代码中,cmd2只有运行成功才会运行cmd1,否则直接回显失败。

答案3

Petr Uzel 说得很对,但你也可以玩神奇的 $?。

$?保存最后执行的命令的退出代码,如果使用它,您可以非常灵活地编写脚本。

这个问题有点涉及这个话题,使用 $ 的最佳实践?在bash中?

cmd1 
if [ "$?" -eq "0" ]
then
  echo "ok"
else
  echo "Fail"
fi

然后,如果您愿意,您还可以对不同的退出代码做出反应并执行不同的操作。

相关内容