IP正则表达式



我试图使一个情况的声明,检查给出的参数,如果它的IP连接到它。我在验证IP时遇到麻烦。

case $1 in
-h)
    echo "usage: $0 <IP/DNS/IP range> <Port/Portrange>";
    ;;
--help)
    echo "usage: $0 <IP/DNS/IP range> <Port/Portrange>";
    ;;
    [1-255].[0-255].[0-255].[0-255] )

上面的正则表达式只适用于1.1.1.1或相同的ip。

字符类定义单个字符。因此,[1-255]匹配范围为1-2,或5,或5的单个字符。

如果你想坚持case语法,正确的解决办法是清除不允许的变体,然后落到你的实际处理。

*[!.0-9]* | *.*.*.*.* | .* | *. | *[0-9][0-9][0-9][0-9]* 
  | *2[6-9][0-9]* | *25[6-9]* )
    error ;;
# require three dots
*.*.*.* ) ... Success scenario ... ;;
* ) error ;;

(我肯定还有一些我忽略了的角落。)

为了简化代码,也许您可以使用变量realip=false并在成功场景中将其设置为true,然后在esac之后执行简单的if $realip,并使case中的代码尽可能简单。

顺便说一下,case支持的模式是glob模式,而不是真正的正则表达式。

最新更新