shell中的case语句 - 问题

时间:2009-11-29 02:23:07

标签: shell unix

我对shell完全不熟悉,并且我试图包含一个函数的arg#1大于或等于12然后它应该返回1的情况。但是下面的代码不起作用。

case $1 in
     -ge 12)        NUM=1   ;;
     *)         NUM=0   ;;
esac
echo $NUM

5 个答案:

答案 0 :(得分:3)

出于某种原因,您是否必须使用case?如果没有,if似乎更自然:

if [[ $1 -ge 12 ]]; then
  NUM=1
else
  NUM=0
fi

echo $NUM

使用case,bash会对 word pattern 执行算术扩展,因此您可以编写

case 1 in
  $(( $1 >= 12 )) )  NUM=1 ;;
  $(( $1 >=  7 )) )  NUM=2 ;;
  *)                 NUM=0 ;;
esac

美丽在旁观者的眼中。

答案 1 :(得分:3)

case语句不解释像-ge这样的运算符。从bash手册页:

   case word in [ [(] pattern [ | pattern ] ... ) list ;; ] ... esac
          A case command first expands word, and tries to match it 
          against each pattern in  turn,  using the same matching rules as 
          for pathname expansion (see Pathname Expansion below).

您应该在if语句中使用条件表达式。

答案 2 :(得分:0)

案例需要采用模式表达式,例如一个字符串。

我建议使用简单的if语句:

if [[ $1 -ge 12 ]]; then
  NUM=1
else
  NUM=0
fi

或者在模式表达式中表达分支:

case "$1" in
     [0-9])             NUM=1   ;;
     1[0-2])            NUM=1   ;;
     *)                 NUM=0   ;;
echo $NUM

答案 3 :(得分:0)

case "$1" in
     [0-9]|1[01])NUM=0   ;;
     *) NUM=1   ;;
echo $NUM

答案 4 :(得分:0)

您想要使用程序/usr/bin/test

if test "$1" -ge 12; then NUM=1; else NUM=2; fi