开源中文网

您的位置: 首页 > Shell > 正文

linux中shell检查字符串是不是有效ip

来源: 网络整理  作者: 佚名

shell检查字符串是不是有效ip我们举了两个例子,第一个检查是否为合法的IP格式,后面升级检查是不是一个有效的IP,下面来看。
例子

zj@zj:~/Script/cushell/08.11.04$ cat checkip.sh
view plainprint?
#!/bin/bash 
 
 
printerr () { 
        echo "incorrect IP format." 
        readip 
        chkip 

 
readip () { 
        read -p "Your IP: " IP 

 
chkip () { 
        echo "$IP" | grep -Eq '[^0-9.]|^\.|\.$|^0*\.|\.\.' && printerr 
        [ $(echo -e "${IP//./\n}" | wc -l) -ne 4 ] && printerr 
        for i in ${IP//./ } ; do 
                echo $i | grep -Eq "^0+[^0]" && printerr 
                [ $((10#$i/8)) -gt 31 ] && printerr 
 
        done 

 
if [ "$1" ]; then 
        IP=$1 
else 
        readip 
fi 
chkip 
echo "$IP is good!"
解释下:
grep -Eq '[^0-9.]|^\.|\.$|^0*\.|\.\.'
[^0-9.]是不是有除了0-9与.之外的字符
^\.|\.$  以.开头 or 以.结尾
^0*\.|\.\. 以0开头 or 连续两个.
以上三种情况都是错误的哦,所以就printerr
echo -e "${IP//./\n}" | wc -l说实话前面那种替换我也是first time.就是讲.替换为换行,3个点就是4行了哦.不是3个点也就printerr
$((10#$i/8)) -gt 31 这个就是判断是不是<=255的了,当然你也可以自己修改成$i -gt 255
OK解释完毕^_^

zj@zj:~/Script/cushell/08.11.04$ ./checkip.sh 1.2.3.4
1.2.3.4 is
zj@zj:~/Script/cushell/08.11.04$ ./checkip.sh 01.2.3.4
incorrect IP format.
Your IP: a.b.a.d
incorrect IP format.
Your IP: 266.1.1.1
incorrect IP format.
Your IP: 244.255.255.255
244.255.255.255 is
例子2、使用shell校验IP地址合法性
使用方法:


[root@yang python]# bash check_ip.sh IP地址
执行结果:返回值0校验合法,非0不合法。
shell代码:

[root@yang python]# vi check_ip.sh
#!/usr/bin/sh
CheckIPAddr()
{
echo $1|grep "^[0-9]\{1,3\}\.\([0-9]\{1,3\}\.\)\{2\}[0-9]\{1,3\}$" > /dev/null;
#IP地址必须为全数字
        if [ $? -ne 0 ]
        then
                return 1
        fi
        ipaddr=$1
        a=`echo $ipaddr|awk -F . '{print $1}'`  #以"."分隔,取出每个列的值
        b=`echo $ipaddr|awk -F . '{print $2}'`
        c=`echo $ipaddr|awk -F . '{print $3}'`
        d=`echo $ipaddr|awk -F . '{print $4}'`
        for num in $a $b $c $d
        do
                if [ $num -gt 255 ] || [ $num -lt 0 ]    #每个数值必须在0-255之间
                then
                        return 1
                fi
        done
                return 0
}
if [ $# -ne 1 ];then            #判断传参数量
        echo "Usage: $0 ipaddress."
        exit
else
CheckIPAddr $1
fi

Tags:字符串
关于开源中文网 - 联系我们 - 广告服务 - 网站地图 - 版权声明