我对shell完全不熟悉,并且我试图包含一个函数的arg#1大于或等于12然后它应该返回1的情况。但是下面的代码不起作用。
case $1 in
-ge 12) NUM=1 ;;
*) NUM=0 ;;
esac
echo $NUM
答案 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