批量Ping执行Bash脚本

#!/bin/bash
# Ping Batch Script

# 连接超时时间
TMOUT=3
# 最大线程数
MAX_THREAD=4000
# 保留内存大小
MIN_MEM=400


# 默认ip配置,可通过 -r ip-ip指定,格式: ping_batch.sh -r 192.168.1.1-192.168.2.254
# ip前缀
ip_preffix="192.168"
# 16位主机范围 192.168.1-192.168.2
ip_network_range="1-2"
# ping范围 192.168.1.1-192.168.2.254
ip_host_range="1-254"

# ping脚本
PING_SCRIPT='ping -c 1 ${ip_preffix}.${ip_network}.${ip_host} &> /dev/null;[[ $? -eq 0 ]] && echo -e "\033[32m${ip_preffix}.${ip_network}.${ip_host} yes\033[0m" || echo -e "\033[32m${ip_preffix}.${ip_network}.${ip_host} no\033[0m" &>/dev/null'

# Ip格式错误提示
function ip_format_error()
{
echo -e "\033[31mIp format is incorrect.\nIp format: ping_batch.sh -r ip-ip.\nsimple: ping_batch.sh -r 192.168.1.1-192.168.2.1\033[0m"
exit
}

# 传入参数Ip格式判断及格式化
case "$1" in
'-r')
shift
ip_start=`echo $1|awk -F'-' '{print $1}'`
ip_end=`echo $1|awk -F'-' '{print $2}'`
echo $ip_start|grep -E "^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$" &>/dev/null
[[ $? -eq 0 ]] || ip_format_error
echo $ip_end|grep -E "^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$" &>/dev/null
[[ $? -eq 0 ]] || ip_format_error
ip_start_preffix=`echo $ip_start|awk -F'.' '{print $1"."$2}'`
ip_end_preffix=`echo $ip_end|awk -F'.' '{print $1"."$2}'`
if [[ "$ip_start_preffix" == "$ip_end_preffix" ]]
then
ip_preffix=$ip_start_preffix
else
echo -e "\033[31m Ip 192.168.1.1-192.168.2.1\n192.168==192.168\nSubnet is 16 bits.\033[0m"
exit
fi
ip_network_range_start=`echo $ip_start|awk -F'.' '{print $3}'`
ip_network_range_end=`echo $ip_end|awk -F'.' '{print $3}'`
ip_host_range_start=`echo $ip_start|awk -F'.' '{print $4}'`
ip_host_range_end=`echo $ip_end|awk -F'.' '{print $4}'`
ip_network_range="${ip_network_range_start}-${ip_network_range_end}"
ip_host_range="${ip_host_range_start}-${ip_host_range_end}"
;;
*)
echo -e "\033[31m执行默认配置\033[0m"
;;
esac

# 模拟线程,超过配置值,等待
function thread_wait()
{
if [[ $(ps -ef|wc -l) -gt $MAX_THREAD ]]
then
sleep 1
thread_wait
fi
}

# 内存保留检查,小于设定值则等待
function free_check()
{
if [[ $(free -m|grep 'Mem:'|awk '{print $4}') -lt MIN_MEM ]]
then
sleep 2;
free_check
fi
}

# 格式化Ip并执行ping脚本
for ip_network in `seq $(echo $ip_network_range|awk -F '-' '{print $1}') $(echo $ip_network_range|awk -F '-' '{print $2}')`
do
thread_wait
for ip_host in `seq $(echo $ip_host_range|awk -F '-' '{print $1}') $(echo $ip_host_range|awk -F '-' '{print $2}')`
do
free_check
(eval "${PING_SCRIPT}") &
done
done

 

#!/bin/bash
# Ping Batach
ip_prefix="192.168"
ip_network_range="1-2"
ip_network_host_range="1-254"

function ping_batch()
{
  ip="$1"
  script_ping='ping -c 2 '$ip'&>/dev/null;[[ $? -eq 0 ]] && echo -e "\033[32m'$ip' yes\033[0m" || echo -e "\033[36m'$ip' no\033[0m">/dev/null'
  eval $script_ping &
}
for i in `seq $(echo $ip_network_range|awk -F '-' '{print $1}') $(echo $ip_network_range|awk -F '-' '{print $2}')`;do for j in `seq $(echo $ip_network_host_range|awk -F '-' '{print $1}') $(echo $ip_network_host_range|awk -F '-' '{print $2}')`;do ping_batch "${ip_prefix}.${i}.${j}";done;done

 

posted @ 2019-08-18 11:15  chentianyuan  阅读(671)  评论(0编辑  收藏  举报