有时我们需要检测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
}