shell 判斷字串是否為有效ip地址
阿新 • • 發佈:2019-01-29
IPADDR=192.168.1.1 (有效)
IPADDR=192.168.0.254(有效)
IPADDR=10.0.0.0(無效)
IPADDR=0.1.1.1(無效)
IPADDR=192.168.001.001 (無效)
IPADDR=1aa.2bb.3cc.4dd (無效)
IPADDR=aaa.bbb.ccc.ddd (無效)
IPADDR=192.168.1.1.2 (無效)
IPADDR=292.168.1.1(無效)
IPADDR=192.168.1.1111(無效)
指令碼如下:
#!/bin/sh
IPADDR=$1
_ckIPaddr () {
ckStep1=`echo $1 | awk -F"." '{print NF}'`
if [ $ckStep1 -eq 4 ] || [ $ckStep1 -eq 6 ]
then
ckStep2=`echo $1 | awk -F"." '{if ($1!=0 && $NF!=0) split ($0,IPNUM,".")} END \
{ for (k in IPNUM) if (IPNUM[k]==0) print IPNUM[k]; else if (IPNUM[k]!=0 && IPNUM[k]!~/[a-z|A-Z]/ && length(IPNUM[k])<=3 &&
IPNUM[k]<255 && IPNUM[k]!~/^0/) print IPNUM[k]}'| wc -l`
if [ $ckStep2 -eq $ckStep1 ]
then
echo 0
else
echo 1
fi
else
echo 1
fi
}
CK_IPADDR=`_ckIPaddr $IPADDR`
if [ $CK_IPADDR -eq 1 ]
then
echo "The string $IPADDR is not a correct ipaddr!!!"
fi
另外補充正則表示式的方法:
#!/bin/sh
IPADDR=$1
regex="\b(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[1-9])\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[1-9])\b"
ckStep2=`echo $1 | egrep $regex | wc -l`
if [ $ckStep2 -eq 0 ]
then
echo "The string $IPADDR is not a correct ipaddr!!!"
else
echo $1
fi
IPADDR=192.168.0.254(有效)
IPADDR=10.0.0.0(無效)
IPADDR=0.1.1.1(無效)
IPADDR=192.168.001.001 (無效)
IPADDR=1aa.2bb.3cc.4dd (無效)
IPADDR=aaa.bbb.ccc.ddd (無效)
IPADDR=192.168.1.1.2 (無效)
IPADDR=292.168.1.1(無效)
IPADDR=192.168.1.1111(無效)
指令碼如下:
#!/bin/sh
IPADDR=$1
_ckIPaddr () {
ckStep1=`echo $1 | awk -F"." '{print NF}'`
if [ $ckStep1 -eq 4 ] || [ $ckStep1 -eq 6 ]
then
ckStep2=`echo $1 | awk -F"." '{if ($1!=0 && $NF!=0) split ($0,IPNUM,".")} END \
{ for (k in IPNUM) if (IPNUM[k]==0) print IPNUM[k]; else if (IPNUM[k]!=0 && IPNUM[k]!~/[a-z|A-Z]/ && length(IPNUM[k])<=3 &&
IPNUM[k]<255 && IPNUM[k]!~/^0/) print IPNUM[k]}'| wc -l`
if [ $ckStep2 -eq $ckStep1 ]
then
echo 0
else
echo 1
fi
else
echo 1
fi
}
CK_IPADDR=`_ckIPaddr $IPADDR`
if [ $CK_IPADDR -eq 1 ]
then
echo "The string $IPADDR is not a correct ipaddr!!!"
fi
另外補充正則表示式的方法:
#!/bin/sh
IPADDR=$1
regex="\b(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[1-9])\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[1-9])\b"
ckStep2=`echo $1 | egrep $regex | wc -l`
if [ $ckStep2 -eq 0 ]
then
echo "The string $IPADDR is not a correct ipaddr!!!"
else
echo $1
fi