【问题标题】:Why is both the if and else executed? [closed]为什么 if 和 else 都执行? [关闭]
【发布时间】:2012-10-20 08:07:35
【问题描述】:

我的代码是:

if [ "$server" == "a" ]; then
        echo "apache"
fi

if [ "$server" ==  "t"   ]
then
        echo "tomcat"
else
        echo "Entered"
fi

$server 的值为t。我希望值tomcat 打印在控制台上。但是Entered也被打印出来了!

我对此感到困惑。 ifelse语句怎么都执行了?

【问题讨论】:

  • 为我工作。你确定bash 正在解释脚本吗?
  • 如果您看到Entered,它一定来自脚本中的不同行,或者您循环回到这条语句,server 的值已更改......
  • 如果你使用[ "$server" -eq "t" ],你会得到什么?
  • 相当肯定-eq 仅用于整数比较。
  • 你试过[ "X$server" = "Xt" ]

标签: bash shell ubuntu


【解决方案1】:

只有在前面的 if 语句计算结果为 false 时,才应该执行 else 分支。据我所知,该规则实际上没有任何例外。导致该问题的 bash 文件中可能还有其他问题。

确保 bash 是执行脚本的对象。 #!/bin/bash 应该在第一行。

【讨论】:

    【解决方案2】:

    要解决您的问题,请执行以下操作:

    • 将 echo 语句放入每个分支:

      if [ "$server" == "a" ]; then
          echo "in branch apache"
          echo "apache"
      fi
      
      if [ "$server" ==  "t"   ]
      then
              echo "in branch tomact"
              echo "tomcat"
      else
              echo "in else branch"
              echo "Entered"
      fi
      

    如果您仍然无法发现问题,请选择以下方法之一:

    • 使用-x 标志执行脚本

      bash -x <scriptname>
      
    • 注释掉每一行...然后逐行注释,看看得到什么结果

    【讨论】:

      猜你喜欢
      • 2015-09-07
      • 1970-01-01
      • 2021-11-06
      • 1970-01-01
      • 2022-12-14
      • 1970-01-01
      • 1970-01-01
      • 2021-05-08
      • 1970-01-01
      相关资源
      最近更新 更多