创建了简单的脚本,只允许数字值作为参数。
#!/bin/bash
while getopts ":A:" OPTION
do
case $OPTION in
A)
if [[ $OPTARG != *[[:digit:]]* ]]
then
printf "Invalid argumentn"
else
printf "Valid argument %sn" $OPTARG
fi
;;
?)
return
;;
esac
done
然后通过不同的选项执行它并获得意外的输出。
$ ./test.bash -A 1
Valid argument 1
$ ./test.bash -A a
Invalid argument
$ ./test.bash -A 1,2,3
Valid argument 1,2,3
$ ./test.bash -A A12B
Valid argument A12B
$ ./test.bash -A 12AB
Valid argument 12AB
所以从上面的输出中,我无法区分只有数字值允许作为参数。知道如何只允许数字值吗?
假设一个有效的OPTARG可以有任意数量的数字,我想到了两种方法。 首先,您可以检查 OPTARG 是否存在任何非数字:
if [[ $OPTARG == *[^[:digit:]]* ]]
或者,其次,您可以使用正则表达式并要求OPTARG不是(!
)从开始(^
)到结束($
)的所有数字([:digit:]]+
):
if [[ ! $OPTARG =~ ^[[:digit:]]+$ ]]