当前位置: 首页 >> Shell >> 【脚本】在shell中如何判断字符串是否为有效的IP地址 >> 正文

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

2年前 (2022-01-01)     作者:Jiaozn     分类:Shell     阅读次数:2308     评论(1)    

近来需要写个小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=$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


除非注明,发表在“Jiaozn的博客”的文章『【脚本】在shell中如何判断字符串是否为有效的IP地址』版权归Jiaozn所有。 转载请注明出处为“本文转载于『Jiaozn的博客』原地址https://www.jiaozn.com/reed/751.html
0

评论

发表评论   

昵称*

E-mail*(建议输入,以便收到博主回复的提示邮件)

网站

分享:

支付宝

微信