2016-11-29 45 views
0

Case语句我想写多表达一个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 

但这并不打印我所期待的。

回答

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 
+0

杰夫这实际上是我需要的,是的,我想要做的不仅仅是打印数字,但那只是一个例子。谢谢,这将有极大的帮助 –

0

这并不完全清楚你想要匹配什么。首先一定要检查教程,说here

在你的榜样结果字符串中的下一个记录

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

"1+0+1+0" 

这是你的意思? 1010将只是:

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

下一个记录你总是相匹配的表达式包含“_”字符。显然你不会匹配,因为你从来没有写过(至少在你的例子中)。

最后,即使你删除_

*1|1*|*1|*1 

相同匹配*1 OR 1*。你复制了两次,没有任何理由。这里用文字写的是任何以1结尾的单词或任何以1开头的单词。很确定这不是你的意思。

再次 - 阅读教程。

+0

基本上,我希望能够匹配(A,B ,c,d)这些变量变化不是静态的,我把它写成静态的就像例子。我不确定语法如何适用于多重变量,这就是为什么我有麻烦。我可以写一个用于1个变量。 –

+0

没有这样的语法。请编辑您的问题以询问您的实际问题,或接受此问题并撰写一个新问题。提供想要匹配每个变量的内容。有可能这种情况不是这里最好的选择(除非这些情况中的每一个仅仅是1秒或只有0秒)。也许你需要一个循环的案例。 – kabanus

+0

谢谢你的帮助。如果这是不可能的,我会尝试别的。 –