有时我们需要检测IP输入的正确性与网络掩码的正确性,用shell脚本写的:
#验证ip地址的正确性 check_ip_format() { echo $1 | grep "^[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}$" > /dev/null if [ $? = 1 ]; then return 1 else a=`echo $1 | awk -F. '{print $1}'` b=`echo $1 | awk -F. '{print $2}'` c=`echo $1 | awk -F. '{print $3}'` d=`echo $1 | awk -F. '{print $4}'` if [ $a -ge 255 -o $a -le 0 -o $b -gt 255 -o $b -lt 0 -o $c -gt 255 -o $c -lt 0 -o $d -gt 255 -o $d -le 0 ]; then return 2; fi #验证是否组播地址 if [ $a -ge 224 -a $a -le 239 ]; then return 3 fi #验证回环 if [ $a -eq 127 ]; then return 4 fi fi return 0 } #把数字转换为二进制数字 D2B() { num="$1" d2b=`echo "obase=2;$num" | bc` echo $d2b } #验证掩码的正确性 check_mask_format() { echo $1 | grep "^[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}$" > /dev/null if [ $? = 1 ]; then return 1 fi a=`echo $1 | awk -F. '{print $1}'` b=`echo $1 | awk -F. '{print $2}'` c=`echo $1 | awk -F. '{print $3}'` d=`echo $1 | awk -F. '{print $4}'` a=`D2B $a` b=`D2B $b` c=`D2B $c` d=`D2B $d` for i in $a $b $c $d;do [[ $i != 0 && ${#i} != 8 ]] && return 2 done mask=$a$b$c$d [[ "$mask" =~ ^1[1]*[0]*$ ]] || return 3 return 0 }