具有多个表达式或条件的案例陈述

时间:2016-11-29 15:20:46

标签: bash shell switch-statement

我想用多个表达式编写一个case语句,如:

a=1
b=0
c=1
d=0
case ${a}+${b}+${c}+${d} in
    *_1|1_*|*_1|*_1)
            echo "it's 1,1,1,1";;
    *_1|*_1|*_1|*_0)
            echo "it's 1,1,1,0";;
    *_1|0_*|1_*|0_*)
            echo "it's 1,0,1,0";;
esac

但这并不能打印出我所期待的东西。

2 个答案:

答案 0 :(得分:1)

在我看来,你正试图匹配这四个变量的串联;也许你想做一些其他事情而不是打印价值(你已经煞费苦心地已经确定了),但是这里 你可以做到这一点:

#!/bin/sh

a=1
b=0
c=1
d=0
case ${a}${b}${c}${d} in
  (0000)
        echo "it's 0000"
        ;;
  (0001)
        echo "it's 0001"
        ;;
  (0010)
        echo "it's 0010"
        ;;
  (0011)
        echo "it's 0011"
        ;;
  (0100)
        echo "it's 0100"
        ;;
  (0101)
        echo "it's 0101"
        ;;
  (0110)
        echo "it's 0110"
        ;;
  (0111)
        echo "it's 0111"
        ;;
  (1000)
        echo "it's 1000"
        ;;
  (1001)
        echo "it's 1001"
        ;;
  (1010)
        echo "it's 1010"
        ;;
  (1011)
        echo "it's 1011"
        ;;
  (1100)
        echo "it's 1100"
        ;;
  (1101)
        echo "it's 1101"
        ;;
  (1110)
        echo "it's 1110"
        ;;
  (1111)
        echo "it's 1111"
        ;;
  (*)
        echo "it's something else"
        ;;
esac

答案 1 :(得分:0)

目前还不完全清楚你想要匹配什么。首先请务必查看教程,说here

下一个注释

${a}+${b}+${c}+${d}

在您的示例中导致字符串:

"1+0+1+0"
这是你的意思吗? 1010就是:

${a}${b}${c}${d}

接下来请注意您匹配的表达式总是包含一个'_'字符。显然您不会匹配,因为您从未写过(至少在您的示例中)。

最后,即使您删除了_

*1|1*|*1|*1

与匹配*11*相同。你没有充分理由重复写两次。这里用文字写的是以1开头的任何单词或以1 开头的任何单词。很确定这不是你的意思。

再次 - 阅读教程。