如果我有一个脚本(bash shell)并想检查传递的参数是否在一个数字范围内,我将如何使用case语句?例如,我的脚本将执行一系列命令,仅当输入的参数是数字10-20时,否则返回错误消息。我可以使用If语句执行此操作,但想知道如何使用case语句。我已经阅读了其他页面,但这样做没有意义:
case $1 in
10
*command executed
11
*command executed
etc...
答案 0 :(得分:4)
尝试这样做:
if (($1 >= 10 && $1 <=20)); then
echo "Correct range"
else
echo >&2 "Incorrect range"
fi
我使用bash arithmetic。在这里使用case
语句似乎有点低效。
如果你坚持要case
:
case $1 in
1[0-9]|20) echo "Correct range" ;;
*) echo >&2 "Incorrect range" ;;
esac
答案 1 :(得分:2)
您可以使用方括号表示可能的值列表:
case $1 in
1[0-9]|20)
echo "All is well. I will run the command."
;;
*)
echo "All is not well! You are a fool to tell me such a number!"
;;
esac
详细了解案例陈述in the Bash Beginner's Guide
答案 2 :(得分:1)
使用$((...))
可能有用:
case 1 in
$(($1 >= 10 && $1 < 20))) echo '10-19';;
$(($1 >= 20 && $1 < 30))) echo '20-29';;
$(($1 >= 30 && $1 < 40))) echo '30-39';;
esac