使用逻辑和unix shell脚本来切换案例

时间:2012-11-03 13:24:20

标签: shell unix switch-statement logical-operators

是否可以在unix shell脚本切换案例中使用逻辑AND。如果是这样,怎么样?

switch $var in
    1 AND $var2 EQUALS 2)
        some code

2 个答案:

答案 0 :(得分:0)

您需要使用if语句。

this

  

“每个案例都是一个匹配模式的表达式   执行第一个匹配的COMMAND-LIST。 “|”使用符号   用于分隔多个模式,“)”运算符终止a   模式列表。 “

因此,对于每种情况,您都需要拥有模式,而不是要评估的表达式。

答案 1 :(得分:0)

您可以使用:

case "$var1:$var2" in
(1:2) # $var1 = 1 && $var2 == 2
      ;;
...
esac

在这种情况下,我添加了冒号(任意非数字),因此您可以合理地确定值是如上所述。但是,如果有人获得var1="1:2"var2="",则测试会通过,但值不会是必需的。但是,如果您负责变量,那么这是非常明智的。使用if进行简单的值测试可能更简洁,但是如果你需要进行范围测试,这可能比等效的if更简洁,但不太清楚:

case "$var1:$var2" in
([1-3]:[4-9]) # $var1 in {1,2,3} && $var2 in {4,5,6,7,8,9}
      ;;
...
esac

case "$var1:$var2" in
(*amber*:*gold*) # $var1 contains 'amber' && $var2 contains 'gold'
      ;;
...
esac

bash可能具有处理后者的内置功能;老壳没有。如果您需要移植到默认安装bash的计算机(可能是AIX,HP-UX,Solaris),则此技术可能很有用。