我试图使一个情况的声明,检查给出的参数,如果它的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模式,而不是真正的正则表达式。