#!/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
原文地址:https://www.cnblogs.com/tianyuanchen/p/11371751.html
时间: 2024-11-10 10:14:44