使用正则表达式进行Bash参数验证

时间:2012-03-01 14:25:10

标签: regex bash

我不知道如何在bash中正确使用正则表达式,我试图以这种方式做错误,正则表达式验证有什么问题?

#!/bin/bash

if [ ! $# -eq 1 ]; then
        echo "Error: wrong parameters"
else
        if [ $1 =~ "[a-z]" ]; then
                echo "$1: word"
        elif [ $1 =~ "[0-9]" ]; then
                echo "$1: number"
        else
                echo "$1: invalid parameter"
        fi
fi

3 个答案:

答案 0 :(得分:11)

我已经重新编写了您的脚本,并通过以下方式获得了预期的结果:

  #!/bin/bash                                                                                                                                                                                      
  if [ ! $# -eq 1 ]; then
    echo "Error: wrong parameters"
  else
    if [[ $1 =~ ^[a-z]+$ ]]; then
      echo "$1: word"
    elif [[ $1 =~ ^[0-9]+$ ]]; then
      echo "$1: number"
    else
      echo "$1: invalid parameter"
    fi
  fi

您无需引用正则表达式。

答案 1 :(得分:5)

Don't quote the regex,并使用双括号:

[[ "$1" =~ [a-z] ]]

在这个特定情况下引用变量并不是绝对必要的,但它并没有什么坏处,因为与word splitting相关的非常非常多的陷阱,总是引用包含变量的字符串是一种好习惯。 / p>

答案 2 :(得分:-1)

使用两个括号:

if [[ "$1" =~ [a-z] ]] ; then