批量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
本文来自博客园,作者:chentianyuan,转载请注明原文链接:https://www.cnblogs.com/tianyuanchen/p/11371751.html