【问题标题】:Bourne shell - convert IP range into set of subnetsBourne shell - 将 IP 范围转换为子网集
【发布时间】:2015-04-23 21:21:07
【问题描述】:

我正在 Bourne shell 中寻找一个函数,将“sIP-dIP”格式的给定 IP 范围转换为定义相同范围的可用子网集。 我正在寻找的正是该站点提供的 IP Range 功能的相同结果:http://www.ipaddressguide.com/cidr

示例:

给定:

10.0.0.6-10.10.1.34:

结果:

10.0.0.6/31
10.0.0.8/29
10.0.0.16/28
10.0.0.32/27
10.0.0.64/26
10.0.0.128/25
10.0.1.0/24
10.0.2.0/23
10.0.4.0/22
10.0.8.0/21
10.0.16.0/20
10.0.32.0/19
10.0.64.0/18
10.0.128.0/17
10.1.0.0/16
10.2.0.0/15
10.4.0.0/14
10.8.0.0/15
10.10.0.0/24
10.10.1.0/27
10.10.1.32/31
10.10.1.34/32 

我见过很多例子,但它们都是针对 bashCphyton 的,但我使用的是带有 Bourne shell 的busybox .

谁能提供一些意见?

非常感谢!

【问题讨论】:

  • 我建议您尝试将您找到的bash 解决方案转换为sh,然后再回复您的任何具体问题。
  • 好的,基于这个 bash 脚本:stackoverflow.com/questions/22699906/… 我认为 sh 不喜欢 for ((a=1; a
  • 这也是一个选项,但需要从 php 转换:pastebin.com/VT1B0gDM
  • 好的,看看那个 bash 脚本而不实际运行它,我认为 for 循环是唯一需要替换的东西。看我的回答。

标签: function ip range sh cidr


【解决方案1】:

您可以将 bash 特定的 C 风格 for 循环替换为

a=1
while [ "$a" -le "$diff" ]; do
    # body of loop here
    a=$((a+1))
done

为了 POSIX 兼容性。

【讨论】:

    猜你喜欢
    • 2011-02-13
    • 1970-01-01
    • 2015-11-08
    • 1970-01-01
    • 2014-04-09
    • 2013-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多