Как сделать ipcal взять список IP-адресов в cidr

Я могу сделать ipcal, чтобы дать мне NETMASK, используя код ниже. как я могу заставить его взять список IP-адресов в нотации cidr, как 41.80.0.0/17 и дать мне только IP-адрес netmask.if я труба список ip адресов (в cidr formart) будет работать. Спасибо

#!/bin/bash

echo -n "Enter IP address in CIDR notation: (eg. 192.168.0.0/24) "
read IP_ADDRESS

# Calculate network values
BROADCAST=$(ipcalc -b $IP_ADDRESS)
NETWORK=$(ipcalc -n $IP_ADDRESS)
NETMASK=$(ipcalc -m $IP_ADDRESS)

echo "Set up your ifcfg file with the following values:"
echo $BROADCAST
echo $NETWORK
echo $NETMASK

2 ответа

Ваш сценарий может быть значительно упрощен, если вы выполняете всю обработку в Awk.

#!/bin/bash

read -p "Enter IP address in CIDR notation: (eg. 192.168.0.0/24) " IP_ADDRESS

ipcalc -b "$IP_ADDRESS" |
awk '/^Broadcast: / { b=$2 }
     /^Network: / { n=$2 }
     /^Netmask: / { m=$2 }
     END { print "Set up your ifcfg file with the following values:";
       print b; print n; print m; }'

Вот что я получаю от ipcalc -b 192.168.0.0/23

Address:   192.168.0.0
Netmask:   255.255.254.0 = 23
Wildcard:  0.0.1.255
=>
Network:   192.168.0.0/23
HostMin:   192.168.0.1
HostMax:   192.168.1.254
Broadcast: 192.168.1.255
Hosts/Net: 510                   Class C, Private Internet

Таким образом, чтобы получить то, что вам нужно, измените на:

BROADCAST=$(ipcalc -b 192.168.0.0/23 | awk '/Broadcast/ {print $2}')
NETWORK=$(ipcalc -b 192.168.0.0/23 | awk '/Network/ {print $2}')
NETMASK=$(ipcalc -b 192.168.0.0/23 | awk '/Netmask/ {print $2}')

echo $BROADCAST
192.168.1.255

echo $NETWORK
192.168.0.0/23

echo $NETMASK
255.255.254.0
Другие вопросы по тегам