例子:
./1.sh 32
./1.sh 16
./1.sh 24
源实现:
#!/bin/bash
cidr_to_netmask() {
local cidr=$1
local shift=$((cidr))
local netmask=""
for ((i=0; i<4; i++)); do
if [ $shift -ge 8 ]; then
netmask+="255"
else
result=$((256 - 2 ** (8 - shift) ))
netmask+=$(expr $result % 256)
fi
shift=$((shift-8))
[ $i -lt 3 ] && netmask+="."
done
printf "%s\n" "$netmask"
}
# 将CIDR格式的子网掩码转换为点分十进制格式
cidr=$1
netmask=$(cidr_to_netmask $cidr)
echo "CIDR /$cidr 转换为点分十进制格式为: $netmask"