IP/掩码格式转换的方案
子网掩码位数转换为点分表示
prefix_to_mask() {
num=$((4294967296 - 2 ** (32 - $1)))
for i in $(seq 3 -1 0); do
echo -n $((num / 256 ** i))
num=$((num % 256 ** i))
if [ "$i" -eq "0" ]; then
echo
else
echo -n .
fi
done
}
mask=$(prefix_to_mask 24)
点分表示的IP地址转换为整数表示
aton() {
ip=$1
a= $(echo $ip | awk -F'.' '{print $4}')
b= $(echo $ip | awk -F'.' '{print $3}')
c= $(echo $ip | awk -F'.' '{print $2}')
d= $(echo $ip | awk -F'.' '{print $1}')
echo "$(((d << 24) + (c << 16) + (b << 8) + a))"
}
ipn=$(aton "192.168.12.1")
判断子网是否相同
if [ $(($ipna & $maskna)) -eq $(($ipnb & $masknb))]; then
echo "same network"
else
echo "different network"
fi