正则表达式通用匹配ip地址及主机检测

在使用正则表达式匹配ip地址时如果不限定ip正确格式,一些场景下可能会产生不一样的结果,比如ip数值超范围,ip段超范围等,在使用正则表达式匹配ip地址时要注意几点:

        1,字符界定:使用  \<匹配 字符 \> 或  \b 匹配字符 \b ;这个作用是限定ip的长度或位数

        2. 数值范围匹配  :[0-9] ,使用分组的方式,匹配字段

        3. ip段的划分 :按照匹配规则一个正确的ip地址可以划分为如下几个段:

            0-9段,10-99段,100-199段,200-254段;

            正则表达式匹配如下:

grep -o -E "\b(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])\b"
[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])\.){3}
#这是匹配ip的第一段数值,包括 . ,这个匹配中可以匹配任意一个254以内开头的地址段,并且重复匹配三次

     脚本中测试

#!/bin/bash

echo "$1" |  grep -o -E "\b(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])\b"
[ $? -ne 0  ] && { echo "$1 addr error"; exit 1; }
ping -c 1 -w 1 $1 &> /dev/null && echo "$1 host is up !" ||  echo  "$1 host is down !"
#正确测试
[root@yufu home]# ./hostping.sh 192.168.214.2
192.168.214.2
192.168.214.2 host is up !

#错误测试
[root@yufu home]# ./hostping.sh 192.442.214.666
192.442.214.666 addr error

这个匹配方式在centos6和centos7中通用,还有一种简单粗暴的方法匹配ip,但不是非常精确,可能会匹配到其他内容:

[root@yufu home]# ifconfig | egrep -o "[0-9.]{7,}"
192.168.214.187
192.168.214.255
255.255.255.0
1052672      #匹配后的ip地址默认都在第一行,可以head指令截取
127.0.0.1
255.0.0.0

 


    因此可以在此基础上再写一个可以实现自定检测ipd端和检查输入的正确性的主机检测脚本;

 

#!/bin/bash                                                                                                                                                                                    

trap "exit" 2

read -p "Input addr eg: 192.168.214 : " IP

 echo "$IP" |  grep -o -E "\b(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])\.){2}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])\b"
 [ $? -eq 0  ] || { echo "$IP addr error" ; exit 1; }

Ipaddr=$IP

for Host in $(seq 1 254)
do
        ping -c 1 -w 1 $IP.$Host &>/dev/null
        if [ $? -eq 0  ];then
        echo -e "\033[32;1m$IP.$Host is up! \033[0m"
        else
        echo -e "\033[;31m$IP.$Host is down!\033[0m"
        fi
done

检测测试

[root@yufu home]# ./hostping.sh 
Input addr eg: 192.168.214 : 172.16.0
172.16.0
172.16.0.1 is up! 
172.16.0.2 is down!
172.16.0.3 is down!
172.16.0.4 is down!
172.16.0.5 is down!
172.16.0.6 is down!
172.16.0.7 is down!
172.16.0.8 is down!
172.16.0.9 is down!
172.16.0.10 is down!
172.16.0.11 is down!
172.16.0.12 is down!
172.16.0.13 is down!
172.16.0.14 is down!
172.16.0.15 is down!
172.16.0.16 is down!
172.16.0.17 is down!
172.16.0.18 is down!
172.16.0.19 is down!
172.16.0.20 is down!
172.16.0.21 is down!

 

posted on 2018-04-10 15:53  孤岛鱼夫  阅读(1404)  评论(0编辑  收藏  举报