CASE语句中的多个变量

时间:2014-05-14 06:07:41

标签: bash unix

是否可以在CASE语句中使用多个变量?如果是这样,语法是什么?我试图使用一个但似乎无法正确使用它。我希望声明是

case $ch+$sys in
*+lin|02+*) at=C2   ;;
*+rin|02+*) at=O57   ;;
*+lin|05+*) at=C1   ;;
*+rin|05+*) at=O123   ;;
esac

如果其中一个变量不满足条件,则必须显示错误消息!

2 个答案:

答案 0 :(得分:3)

我的另一个答案在所有情况下都不起作用,我错过了最简单的答案,通过过度思考

您只需要有一个条件是两者的串联。

对于任何与上述情况不符的事情,最后放置的*)香港专业教育学院是默认情况。

case $ch+$sys in
    02+lin) at=C2   ;;
    02+rin) at=O57   ;;
    05+lin) at=C1   ;;
    05+rin) at=O123   ;;
    *) echo Not worked ;;

esac

答案 1 :(得分:0)

case语句(在shell编程中很多东西)仅适用于字符串。如何构建这些字符串,可能是由几个变量构成的,完全取决于您。如果你使用类似+的sth组合多个变量,请记住所选择的组合字符原则上可以是值的一部分。因此one+twothree结合使用组合字符+将与one结合two+three相同。但在典型情况下,您可能会选择一个组合字符,您可以确定它不属于值。

因此,只要$ch+$sys未出现在变量中,您将两个变量组合成一个字符串值(使用+)的方法就完全有效。正如您所做的那样,您只需在不同情况下使用相应的匹配值即可。

根据您发布的内容,我无法推导出代码的语义(chsys之类的名称,linrin之类的值太模糊了。所以请详细说明"条件"你在最后一句中提到了。

您的代码目前在伪代码中执行的操作是这样的:

if sys = "lin" or ch = "02" then at ← C2
elif sys = "rin" or ch = "02" then at ← 057
elif sys = "lin" or ch = "05" then at ← C1
elif sys = "rin" or ch = "05" then at ← 0123

这可能是胡说八道,因为至少最后一种情况永远不会发生(第二种情况或第三种情况都会发生,从而阻止了最后一种情况)。

所以也许你想要改写你实际上想要的东西,然后我们就如何实现它提供更明确的建议。