Bash 为什么同时执行if和else?

Bash 为什么同时执行if和else?,bash,shell,ubuntu,Bash,Shell,Ubuntu,我的代码是: if [ "$server" == "a" ]; then echo "apache" fi if [ "$server" == "t" ] then echo "tomcat" else echo "Entered" fi $server的值为t。我希望在控制台上打印值tomcat。但是输入的也会打印出来 我对此感到困惑。为什么执行了if和else语句?只有在前面的if语句计算结果为false时,else分支才应该执行。据

我的代码是:

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

if [ "$server" ==  "t"   ]
then
        echo "tomcat"
else
        echo "Entered"
fi
$server
的值为
t
。我希望在控制台上打印值
tomcat
。但是输入的
也会打印出来


我对此感到困惑。为什么执行了
if
else
语句?

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


确保bash是执行脚本的对象<代码>#/bin/bash应位于第一行。

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


确保bash是执行脚本的对象<代码>#/bin/bash应位于第一行。

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

  • 将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>
    
    bash-x
    
  • 注释掉每一行。。。然后逐行评论,看看你得到了什么结果


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

      • 将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>
        
        bash-x
        
      • 注释掉每一行。。。然后逐行评论,看看你得到了什么结果


      对我有用。您确定
      bash
      正在解释脚本吗?如果您看到
      输入的
      ,它一定来自脚本中的另一行,或者您将
      server
      值更改后循环到此语句……如果您使用
      [“$server”-eq“t”]
      ?非常确定
      -eq
      仅用于整数比较。您是否尝试过
      [“X$server”=“Xt”]
      对我有效。您确定
      bash
      正在解释脚本吗?如果您看到
      输入的
      ,它一定来自脚本中的另一行,或者您将
      server
      值更改后循环到此语句……如果您使用
      [“$server”-eq“t”]
      ?非常确定
      -eq
      仅用于整数比较。您尝试过
      [“X$server”=“Xt”]