我可以为参数设置范围吗?

use*_*802 2 bash shell-script

我有这个代码:

if [[ $1 = "-s" ]] && [[ $2 = 0-9 ]]
then
  echo "yes"
fi
Run Code Online (Sandbox Code Playgroud)

0-9 对我不起作用。我真正想要的是输入,例如,-x 3(或任何数字)。

Cyr*_*rus 8

if [[ $1 = "-s" ]] && [[ $2 -ge 0 ]] && [[ $2 -le 9 ]]
Run Code Online (Sandbox Code Playgroud)

-ge: 大于或等于

-le: 小于或等于


ter*_*don 6

这是可能的,但您需要使用字符类 ( [0-9])。例如:

if [[ "$1" = "-s" ]] && [[ "$2" = [0-9] ]]
then
    echo "yes"
fi
Run Code Online (Sandbox Code Playgroud)

但是,以上仅适用于$2由单个数字组成的情况。如果要$2由一位或多位数字组成,请使用:

if [[ "$1" = "-s" ]] && [[ "$2" != *[!0-9]* && "$2" = [1-9]* ]]
then
    echo "yes"
fi
Run Code Online (Sandbox Code Playgroud)

在较新的 bash 版本中,您还可以使用正则表达式:

if [[ "$1" = "-s" ]] && [[ "$2" =~ ^[0-9]+$ ]]
then
    echo "yes"
fi
Run Code Online (Sandbox Code Playgroud)

^字符串的开始,比赛$结束。的+意思是“0个或多个”。因此,^[0-9]*$只有从头到尾只包含一个或多个数字的字符串才会为真。

  • 您不需要正则表达式匹配运算符来测试变量是否由单个数字组成:`[[ "$1" = "-s" && "$2" = [0-9] ]]`。您不需要正则表达式匹配运算符来测试变量是否仅由数字组成:`[[ "$1" = "-s" && "$2" != *[!0-9]* && "$2" = [ 1-9]* ]]`(这里我也拒绝前导零和空字符串)。 (2认同)