Оболочка Bourne — преобразование диапазона IP-адресов в набор подсетей

Я ищу функцию в оболочке Bourne для преобразования заданного диапазона IP-адресов в формате «sIP-dIP» в полезный набор подсетей, который определяет тот же диапазон. То, что я ищу, это точно такой же результат функции 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 

Я видел много примеров, но все они для bash, C или phyton, но я работаю на busybox с оболочкой Bourne.

Может ли кто-нибудь предоставить некоторые материалы?

Большое спасибо!


person user3018558    schedule 20.04.2015    source источник
comment
Я предлагаю попробовать преобразовать bash решение, которое вы нашли, в sh, и вернуться с любыми конкретными вопросами, которые у вас есть.   -  person chepner    schedule 21.04.2015
comment
Хорошо, на основе этого скрипта bash: stackoverflow.com/questions/22699906/ Я думаю, что sh не нравится for ((a=1; a‹=$diff; a++)); делать   -  person user3018558    schedule 23.04.2015
comment
Это тоже вариант, но он потребует преобразования из php: pastebin.com/VT1B0gDM   -  person user3018558    schedule 23.04.2015
comment
Хорошо, глядя на этот bash-скрипт, не запуская его, я думаю, что цикл for — единственное, что нужно заменить. Смотрите мой ответ.   -  person chepner    schedule 23.04.2015


Ответы (1)


Вы можете заменить цикл for в стиле C в стиле bash на

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

для совместимости с POSIX.

person chepner    schedule 23.04.2015