bash - 无法在 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 语句。
解决方案
看来你快到了...
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
推荐阅读
- ssl - 我在 Google Cloud 托管上的 SSL 证书在哪里?
- ruby-on-rails - Rails has_one:检查是否有新关联
- cocoa - NSCalendarUnitEra 一般情况下我应该关心吗?
- php - 如何在 PHP/Laravel 中删除多个值为 0 的数组
- mongodb - 无法从 Ubuntu 安装/删除任何东西
- android - 如何通过 URL 将图像下载到内部存储器?
- sql - 从 dt=2018-12-01T18:23:59.000Z 到 dt 的 Hive 日期转换 - 5 小时,格式为 12/1/2018 13:23(即 'MM/dd/yyyy hh:mm' )
- antlr4 - Antlr4:用双点解析点尾浮点数
- html - 多列无序列表
- r - R Shiny:如何选择动态闪亮输入