在shell中如何判断字符串是否为有效的IP地址【转】

时间:2023-03-09 20:41:14
在shell中如何判断字符串是否为有效的IP地址【转】

转自

在shell中如何判断字符串是否为有效的IP地址_echoisecho_新浪博客
http://blog.sina.com.cn/s/blog_53a844e50100xxus.html

近来需要写个小shell判断用户输入的字符串是否为有效的ip地址,简单排除了以下几种情况:
1. 以点号为分隔的域不等于4或6;
2. 出现字符;
3. 某域以0开头;
4. 各域数值长度大于3;
5. 各域数值大于255
6. 第一个和最后一个域为0

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=$
_ckIPaddr () {
ckStep1=`echo $ | awk -F"." '{print NF}'`
if [ $ckStep1 -eq ] || [ $ckStep1 -eq ]
then
ckStep2=`echo $ | awk -F"." '{if ($1!=0 && $NF!=0) split ($0,IPNUM,".")} END \
{ for (k in IPNUM) if (IPNUM[k]==) print IPNUM[k]; else if (IPNUM[k]!= && IPNUM[k]!~/[a-z|A-Z]/ && length(IPNUM[k])<= &&
IPNUM[k]< && IPNUM[k]!~/^/) print IPNUM[k]}'| wc -l`
if [ $ckStep2 -eq $ckStep1 ]
then
echo
else
echo
fi
else
echo
fi
} CK_IPADDR=`_ckIPaddr $IPADDR`
if [ $CK_IPADDR -eq ]
then
echo "The string $IPADDR is not a correct ipaddr!!!"
fi

另外补充正则表达式的方法:

#!/bin/sh
IPADDR=$
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 $ | egrep $regex | wc -l`
if [ $ckStep2 -eq ]
then
echo "The string $IPADDR is not a correct ipaddr!!!"
else
echo $
fi