当前位置: 首页 > 知识库问答 >
问题:

基于命令退出码的Bash条件

章学义
2023-03-14
#!/bin/bash

if [ ./success.sh ]; then
    echo "First: success!"
else
    echo "First: failure!"
fi

if [ ./failure.sh ]; then
    echo "Second: success!"
else
    echo "Second: failure!"
fi
#!/bin/bash

exit 0
#!/bin/bash

exit 1
First: success!
Second: failure!

我该如何做到这一点?谢了!

共有1个答案

斜浩穰
2023-03-14

只需去掉括号:

#!/bin/bash

if ./success.sh; then
    echo "First: success!"
else
    echo "First: failure!"
fi

if ./failure.sh; then
    echo "Second: success!"
else
    echo "Second: failure!"
fi

说明:介于ifthen之间的是一个命令(或一系列命令),其退出状态用于确定是运行then子句,还是运行else子句。这正是你想要的。

那么为什么人们在if语句中使用括号呢?这是因为通常您希望根据某个条件表达式(“$a”是否等于“$b”,是否存在某个文件,等等)来决定是否运行的哪个分支。[实际上是一个命令,它将其参数解析为条件表达式(忽略最终的]),然后根据条件是true还是false以成功或失败退出。本质上,[]充当适配器,允许您在if语句中使用条件表达式而不是命令success/failure。在您的情况下,您希望成功/失败不是条件表达式,因此不要使用适配器。

somecommand
if [ $? -eq 0 ]; then
    echo "Somecommand: success!"
else
    echo "Somecommand: failure!"
fi

 类似资料:
  • 它输出,这让我认为变量赋值不会扫过上一个错误代码,也不会产生新的错误代码。但当我尝试这个的时候: 它输出,显然这就是返回的内容,它重写返回的。 我想知道为什么会发生这种情况,变量赋值有什么特殊性,不同于其他正常命令吗?或者仅仅是因为被认为是一个命令,只有命令替换部分才有意义? --更新-- 谢谢大家,从答案和评论中,我得到了这样一个观点:“当您使用命令替换分配变量时,退出状态就是命令的状态。”(作

  • 问题内容: 我可以在node.js中运行bash命令,如下所示: 如何获得该命令的退出代码(在此示例中)?我试过跑步 尽管如此,无论上一个命令的退出代码如何,它总是返回0。我想念什么? 问题答案: 这两个命令在单独的shell中运行。 要获取代码,您应该能够签入回调。 如果这不起作用,则需要添加一个事件处理程序 例如

  • 问题内容: 我对简单地执行变量赋值并使用命令替换时命令将返回的错误代码感到困惑: 它输出,这让我认为变量赋值不会在最后一个赋值时扫掠或产生新的错误代码。但是当我尝试这样做时: 它输出,显然这是返回的内容,并覆盖的返回。 我想知道为什么会这样,变量赋值与其他普通命令有什么区别吗?还是仅仅因为原因被认为是单个命令而只有命令替换部分才有意义? -更新- 谢谢大家,在回答和评论中,我明白了“当您使用命令替

  • 我有3个node K8S集群,我创建了3个副本POD,所有的POD上都运行了Application-App1,我通过运行服务yaml文件建立了服务,我可以看到我的集群-IP通过运行kubectl get服务创建的 当我尝试从其中一个节点进行卷曲时,我得到了“卷曲:(7)连接失败-连接失败”,当我尝试在我得到的pod内卷曲时...“命令终止,退出代码7” 运行的命令: kubectl运行kubia-

  • 问题内容: 我正在用Tkinter用Python编写一个客户端-服务器程序。我需要服务器来跟踪连接的客户端。为此,我希望客户端在单击退出按钮(角落的标准“ X”)后向服务器发送一条自动消息。我怎么知道用户何时退出程序? 问题答案: 您要使用顶级窗口的wm_protocol方法。具体来说,您对协议感兴趣。如果使用该方法,则它允许您注册在销毁窗口时调用的回调。 用法:

  • 我正在为Phonegap开发设置一个环境,我遇到了一些麻烦,最终构建和运行适用于Android的应用程序。 当我尝试执行Android构建时,出现以下错误: 一些细节: 我在 Windows 8.1 上运行; 我使用的是Android SDK 22; 我已经为 JDK、Android(工具、构建工具和平台工具)、Ant 和 Gradle 创建了环境变量。 任何想法为什么我会收到此错误? 谢谢。