• 在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=$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="(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])"
    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
  • 相关阅读:
    Python
    Python
    Redis
    android和.net webservice中的DES加密算法
    android studio中使用recyclerview小白篇(四)
    android studio中使用recyclerview小白篇(三)
    android studio中使用recyclerview小白篇(二)
    android studio中使用recyclerview小白篇(一)
    Fragment之间通过add切换时的显示与隐藏
    android报错:org.ksoap2.SoapFault cannot be cast to org.ksoap2.serialization.SoapObject
  • 原文地址:https://www.cnblogs.com/paul8339/p/7156600.html
Copyright © 2020-2023  润新知