数字验证在 Linux 外壳脚本中无法正常工作



创建了简单的脚本,只允许数字值作为参数。

#!/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:]]+$ ]]    

最新更新