【问题标题】:BASH IP Address CheckBASH IP 地址检查
【发布时间】:2011-11-01 17:20:53
【问题描述】:

我正在编写一个 BASH shell 脚本,我需要能够检查并查看返回的 IP 地址:

dig $HOSTNAME +short

是否在特定子网内。例如,如果是 192.168.10.x 或 10.130.10.x 的一部分,则执行 z,否则执行 y。

我不确定如何在将 IP 地址存储在变量中之后对其进行操作或检查,以便构建上述逻辑测试。

【问题讨论】:

标签: macos bash validation shell ip-address


【解决方案1】:

如果您的子网是完整的 C 类,那么您只需进行子字符串检查:

if [ ${IP#192.168.10.*} == ${IP} -a ${IP#10.130.10.*} == ${IP} ]
then
    echo "not in either subnet"
else
    echo "in one of the subnets"
fi

编辑:请注意,这当然不能验证 IP 是否有效,但它减少了对外部工具的需求。

【讨论】:

  • +1,对于这种情况,这是最明智的解决方案,尽管它并不是真正基于IP地址和子网的想法。
  • 这看起来是个好主意。但是,我似乎很难让它工作,因为它似乎没有从它传递给它的变量中验证 IP。
  • 当我尝试使用这个 sn-p 代码时,我只收到一条错误消息,指出“[: too many arguments”。
  • @John:这意味着你没有使用 bash。或者你已经设置了一些 POSIX-ly 正确的模式。尝试将-a 更改为] && [。如果您实际上没有使用 bash,请解决您的问题并删除“bash”标签。
  • @Derobert - 我使用的是装有 OS 10.6.8 的 Macintosh。
【解决方案2】:

我最终使用以下代码使其工作:

if [[ "$IP" == *10.130.10.* || "$IP" == *192.168.10.* ]]; then
   mount code goes here
fi

感谢大家的帮助并向我解释事情,让我进一步了解脚本。非常感谢!

【讨论】:

    猜你喜欢
    • 2012-08-03
    • 2021-04-27
    • 2013-07-29
    • 1970-01-01
    • 1970-01-01
    • 2013-08-22
    • 1970-01-01
    • 2022-12-02
    • 1970-01-01
    相关资源
    最近更新 更多