0

我可以使用下面的代码让 ipcal 给我 NETMASK。我怎样才能让它以 cidr 表示法获取 IP 地址列表,如 41.80.0.0/17 并只给我 netmask 的 IP 地址。如果我管道ip地址列表(以cidr格式)将它工作。谢谢

#!/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
4

2 回答 2

0

这是我从中得到的 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
于 2015-02-03T12:56:57.600 回答
0

如果您在 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; }'
于 2015-02-03T13:05:14.420 回答