function subnetonetmask(){
SUBNET=$1
NUM=128
SUM=0
NETMASK=''
if [ $(( SUBNET % 8 )) -eq 0 ]; then
M=$(( SUBNET / 8 ))
N=0
NETMASK=$(echo $(printf '255.%.0s' $(eval "echo {1.."$((M))"}"))$(printf "$SUM.%.0s" $(eval "echo {1.."$((4-M))"}"))|cut -d'.' -f1,2,3,4)
else
N=$(( SUBNET % 8 ))
M=$(( (SUBNET - N)/8 ))
while true
do
# echo "$SUM, $NUM"
SUM=$(( SUM + NUM ))
NUM=$(( NUM / 2 ))
N=$(( N - 1))
if [ $N -eq 0 ]; then
break
fi
done
NETMASK=$(echo $(printf '255.%.0s' $(eval "echo {1.."$((M))"}"))$SUM.$(printf "0.%.0s" $(eval "echo {1.."$((4-M-1))"}"))|cut -d'.' -f1,2,3,4)
fi
#echo "M=$M, N=$N"
echo $NETMASK
}
function subip(){
IP=${1}
MASK=${2}
SUBIP=''
for n in 1 2 3 4
do
if [ $n -eq 4 ]; then
dot=''
else
dot='.'
fi
SUBIP=${SUBIP}$(( $(echo $IP|cut -d'.' -f$n) & $(echo $MASK|cut -d'.' -f$n) ))${dot}
done
echo ${SUBIP}
}
=============================================
使用範例:
echo $(subnetonetmask 21)
Result >> 255.255.248.0
echo $(subip 192.168.1.253 255.255.255.128)
Result >> 192.168.1.128