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