码迷,mamicode.com
首页 > 其他好文 > 详细

批量Ping执行Bash脚本

时间:2019-08-18 11:49:00      阅读:118      评论:0      收藏:0      [点我收藏+]

标签:bash脚本   host   ref   erro   lse   错误   function   tar   ash   

#!/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"
}

# 传入参数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"
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参数错误,格式: ping_batch.sh -r 192.168.1.1-192.168.2.254\033[0m"
;;
esac

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

# 内存保留检查,小于设定值则等待
function free_check()
{
sleep 2;
if [[ $(free -m|grep Mem:|awk {print $4}) -lt MIN_MEM ]]
then
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
[[ $(ps -ef|wc -l) -gt $MAX_THREAD ]] && 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 -m|grep Mem:|awk {print $4}) -lt MIN_MEM ]] && free_check
(eval "${PING_SCRIPT}") &
done
done

 

批量Ping执行Bash脚本

标签:bash脚本   host   ref   erro   lse   错误   function   tar   ash   

原文地址:https://www.cnblogs.com/tianyuanchen/p/11371751.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!