我有个问题
If [[ * ]]
then
continue
else
exit 1
fi
我想测试我的开关的参数(例如)是否是一个有效的正十进制整数(从到 的-d 3
一个或多个 ASCII 字符的序列)。之后就只能是一个数字了。其他一切都很糟糕。我不知道该放什么来代替。0
9
-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