测试范围内的数字是否

测试范围内的数字是否

我有个问题

If [[ * ]]
then
continue

else
exit 1
fi

我想测试我的开关的参数(例如)是否是一个有效的正十进制整数(从到 的-d 3一个或多个 ASCII 字符的序列)。之后就只能是一个数字了。其他一切都很糟糕。我不知道该放什么来代替。09-d[0,infinity)*

你能帮助我吗 ?-d位于位置之后的参数$2

答案1

从您的问题和评论来看,您需要$2是一个非负整数:

if [[ "$2" =~ ^[0-9]+$ ]]
then
...

另请注意,它if是用小写字母书写的i

如果您的 Bash 版本不支持正则表达式 (<3.x),您可以使用以下方法grep来完成繁重的工作:

if printf "%s\n" "$2" | grep -qE '^[0-9]+$'
then
...

但看斯蒂芬的评论对于这种方法可能需要注意的地方。

答案2

对于任何类似 Bourne 的 shell(也就是说,可以追溯到 70 年代):

case $2 in
  "" | *[!0-9]*) echo >&2 not OK; exit 1;;
  *) echo OK;;
esac

相关内容