脚本说明
1、脚本支持识别0.0.0.0-255.255.255.255范围的ip段
2、本文脚本只支持ping 16位和24位网段的ip(其他的段以此脚本判断ip地址用for循环或者for嵌套for循环实现ping地址)
3、脚本会在脚本目录下创建两个文件,一个是可以ping通ip的记录文件,一个是ping不通的(可以在开脚本开始判断文件然后删除文件,每次执行后的数据加到文件里)
代码如下
#!/bin/bash
read -p "请输入正确的网段(eg:192.168.0.0/24):" num
#grep匹配ip地址(0.0.0.0-255.255.255.255)
#由于正则表达式匹配数字是[0-9]的范围(可以[0-5],[2-7]),所以把ip分为一位数(0-9),两位数(10-99),三位数(100-255),三位数100-255不可以直接匹配又分为100-199(1开头的三位数)和200-255,又把200-255分为200-249和250-255,整体分为0-9,10-99,100-199,200-249,250-255
#正则:1[0-9]{2},代表1开头后面一位是0-9,匹配两次({1,3}代表匹配1到3次)
#正则:|代表或
echo $num |grep -E "((1[0-9][0-9]\.)|(2[0-4][0-9]\.)|(25[0-5]\.)|([1-9][0-9]\.)|([0-9]\.)){3}((1[0-9][0-9])|(2[0-4][0-9])|(25[0-5])|([1-9][0-9])|([0-9]))\/(1[6-9]|2[0-9]|3[1-2])" &>/dev/null
ec=`echo $?`
if [ $ec -eq 0 ];then
num2=`echo $num |awk -F "/" '{print $1" "$2}'`
mask=`echo $num2 |awk '{print $2}'`
num3=`echo $num2 |awk '{print $1}'`
ip1=`echo $num3 |awk -F "." '{print $1}'`
ip2=`echo $num3 |awk -F "." '{print $2}'`
ip3=`echo $num3 |awk -F "." '{print $3}'`
ip4=`echo $num3 |awk -F "." '{print $4}'`
else
echo "输入有误,请输入正确的网段(eg:192.168.0.0/24)"
exit
fi
if [ $mask -eq 16 ]&&[ $ip3 -eq 0 ]&&[ $ip4 -eq 0 ];then
for i in {0..2}
do
for i2 in {0..2}
do
ping -c 1 $ip1.$ip2.$i.$i2 &>/dev/null
jieguo16=`echo $?`
if [ $jieguo16 -eq 0 ];then
echo "ping $ip1.$ip2.$i.$i2 is OK" >>pingok
else
echo "ping $ip1.$ip2.$i.$i2 is not OK" >>pingnotok
fi
done
done
elif [ $mask -eq 24 ]&&[ $ip4 -eq 0 ];then
for i24 in {0..2}
do
ping -c 1 $ip1.$ip2.$ip3.$i24 &>/dev/null
jieguo24=`echo $?`
if [ $jieguo24 -eq 0 ];then
echo "ping $ip1.$ip2.$ip3.$i24 is OK" >>pingok
else
echo "ping $ip1.$ip2.$ip3.$i24 is not OK" >>pingnotok
fi
done
else
echo "输入有误,请输入正确的网段(eg:192.168.0.0/24)"
exit
fi