首页 > 解决方案 > 无法在 case 语句中执行 ifelse 语句

问题描述

我在 switch 语句的 3 个部分中有一个 if else 语句。我已根据它选择的输出将命令输出分配给变量。但它总是执行通配符 *) 的情况,而不是其他三个。

case "$ROLE" in
        server )
                  if [[ ("$a" == 1) && ("$b" == 1) && ("$c" == 1) && ("$d" == 1) && ("$e" == 1) && ("$f" == 1) ]]
                  then
                     echo 'statement'
                  else
                     echo 'statement'
                   fi
                   ;;
       server1 )
                  if [[ ("$a" == 1) && ("$b" == 1) ]]
                  then
                     echo 'statement'
                  else
                     echo "statement"
                  fi
                  ;;
        server2 )
                  if [[("$a" == 1) && ("$b" == 1) && ("$c" == 1) && ("$d" == 1) && ("$g" == 1) && ("$h" == 1)]]
                  then
                      echo 'statement'
                  else
                      echo "statement"
        *) 
         echo "unknown"
esac

预期的行为是执行 3 种情况之一,但目前每次都执行通配符 case 语句。

标签: bash

解决方案


看来你快到了...

case "$ROLE" in
        server ) if [[ ("$a" == 1) && ("$b" == 1) && ("$c" == 1) && ("$d" == 1) && ("$e" == 1) && ("$f" == 1) ]]
                  then
                     echo 'statement'
                  else
                     echo 'statement'
                   fi
                   ;;
       server1 ) if [[ ("$a" == 1) && ("$b" == 1) ]]
                  then
                     echo 'statement'
                  else
                     echo "statement"
                  fi
                  ;;
        server2 ) if [[ ("$a" == 1) && ("$b" == 1) && ("$c" == 1) && ("$d" == 1) && ("$g" == 1) && ("$h" == 1) ]]
                  then
                      echo 'statement'
                  else
                      echo "statement"
                  fi
                  ;;
        *) echo "unknown";;
esac

我只是

  • 将您的if 陈述直接放在您的案例陈述之后(我认为这是必要的,但显然不是@biffen)
  • 终止您的最终if语句并添加,;;否则您将遇到语法错误
  • 并添加了一些空格

在全球范围内,您的代码还可以。我把它放进去

test.sh然后跑

ROLE=server bash test.sh

得到

statement

推荐阅读