使用case语句验证变量

时间:2014-12-02 06:29:44

标签: bash shell case

如果我有一个脚本(bash shell)并想检查传递的参数是否在一个数字范围内,我将如何使用case语句?例如,我的脚本将执行一系列命令,仅当输入的参数是数字10-20时,否则返回错误消息。我可以使用If语句执行此操作,但想知道如何使用case语句。我已经阅读了其他页面,但这样做没有意义:

case $1 in
10
*command executed
11
*command executed
etc...

3 个答案:

答案 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