#!/usr/bin/bash
# 用函数实现ping指定网络内的所有主机,并显示其状态
# Usage:ping_range ip_address/netmask_prefix
# 测试单个IP地址是否在线的函数
myping(){
IPADDR=$1
if [[ ! "${IPADDR}" =~ ^([0-9]{1,3}\.){3}[0-9]{1,3}$ ]] ;then
echo "The input ${IPADDRESS} is illegal"
exit
fi
ping -c1 -W1 ${IPADDR} &>/dev/null
if [ $? -eq 0 ];then
echo "${IPADDR} is online!"
else
echo "${IPADDR} if offline!"
fi
}
if [ $# -ne 1 ];then
echo "Usage: myping ipaddress/netmask_prefix"
exit
fi
if [[ ! "$1" =~ ^([0-9]{1,3}\.){3}[0-9]{1,3}/[0-9]{1,2}$ ]];then
echo "$1 is illegal, Usage: ping_range ipaddress/netmask_prefix, for insance:ping_range 192.168.2.1/24"
exit 1
fi
IPADDR=$(echo $1 | cut -d"/" -f1)
PREFIX=$(echo $1 | cut -d"/" -f2)
if [[ ! "$PREFIX" =~ ^(8|16|24)$ ]];then
echo "netmask_prefix must be any number of 8 or 16 or 24"
exit
fi
echo -e "IPADDR:${IPADDR}\tPREFIX:${PREFIX}"
case ${PREFIX} in
"8")
NETWORK=${IPADDR%%.*}.0.0.0
echo "Subnet: ${NETWORK}"
# 写三层循环的myping
;;
"16")
NETWORK=${IPADDR%.*}
NETWORK=${NETWORK%.*}.0.0
echo "Subent: ${NETWORK}"
# 写两层循环的myping
;;
"24")
NETWORK=${IPADDR%.*}.0
echo "Subnet: ${NETWORK}"
NETWORKPREFIX=${IPADDR%.*}
for i in {1..254}
do
myping ${NETWORKPREFIX}.$i
done
;;
*)
echo "netmask_prefix errror: ${PREFIX}"
exit
;;
esac