18.03.2010 10:46
Pyatak
 
Имеем:
VARA=10.116.105.55
VARB=255.255.248.0

Нужно получить:
VARC=10.116.104.1

где:
VARA - адрес узла сети
VARB - маска сети
VARС - первый узел сети, который и нужно вычислить

всё это нужно сделать в скрипте.
Может кому попадалось что-то подобное?
Или хотя бы как сделать побитное AND двух чисел в скрипте? Я б тогда и сам навоял.
18.03.2010 11:24
OlegON
 
Как-то не требовалось... Но рекомендую начать поиски отсюда
18.03.2010 11:52
Pyatak
 
О, спасибо, полезный ресурс.
А задача решена пока только для частного случая, когда маска 255.255.255.0:

Код:
VARC=`echo "$VARA" | cut -d"." -f1,2,3`".1"
Возможно, более полно ее решать и не придется, однако, попозже попробую ради интереса.
18.03.2010 12:46
vdm
 
Адрес порезать на части тем-же cut
Сложить так
c1=$(($a1 & $b1))
и т.п
18.03.2010 16:53
Pyatak
 
Спасибо, vdm, то что нужно.
А вот и решение для общего случая:
Код:
IPADDR=10.16.129.5
IPMASK=255.255.252.0

IPA_A=`echo $IPADDR | cut -d"." -f1`
IPA_B=`echo $IPADDR | cut -d"." -f2`
IPA_C=`echo $IPADDR | cut -d"." -f3`
IPA_D=`echo $IPADDR | cut -d"." -f4`

IPM_A=`echo $IPMASK | cut -d"." -f1`
IPM_B=`echo $IPMASK | cut -d"." -f2`
IPM_C=`echo $IPMASK | cut -d"." -f3`
IPM_D=`echo $IPMASK | cut -d"." -f4`

IPGW=$((IPA_A & IPM_A))"."$((IPA_B & IPM_B))"."$((IPA_C & IPM_C))"."$(((IPA_D & IPM_D) + 1))
Только не красиво как-то, строк много.
Часовой пояс GMT +3, время: 00:31.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.