无法在case语句内执行ifelse语句

时间:2019-05-21 11:23:18

标签: bash

我在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语句。

1 个答案:

答案 0 :(得分:2)

好像你快到了...

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