-2

我正在尝试做一个 case 语句来检查给定的参数以及它是否是连接到它的 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。

4

1 回答 1

3

字符类定义单个字符。因此[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并将其设置为,然后在后面做一个简单的操作,并使代码尽可能简单。trueif $realipesaccase

顺便说一句,所支持的模式case是全局模式,而不是真正的正则表达式。

于 2012-12-31T09:52:05.350 回答