#!/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 $.$.$ &> /dev/null;[[ $? -eq 0 ]] && echo -e "\033[32m$.$.$ yes\033[0m" || echo -e "\033[32m$.$.$ no\033[0m" &>/dev/null
'# ip格式錯誤提示
function
ip_format_error()
# 傳入引數ip格式判斷及格式化
case"$1
"in'-r
')shift
ip_start=`echo $1|awk -f'-'
''`ip_end=`echo $1|awk -f'-'
''`echo $ip_start|grep -e "
^(([0-9]|[1-9][0-9]|1[0-9]|2[0-4][0-9]|25[0-5])\.)([0-9]|[1-9][0-9]|1[0-9]|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[0-4][0-9]|25[0-5])\.)([0-9]|[1-9][0-9]|1[0-9]|2[0-4][0-9]|25[0-5])$
" &>/dev/null
[[ $? -eq 0 ]] ||ip_format_error
ip_start_preffix=`echo $ip_start|awk -f'.'
''`ip_end_preffix=`echo $ip_end|awk -f'.'
''`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
fiip_network_range_start=`echo $ip_start|awk -f'.'
''`ip_network_range_end=`echo $ip_end|awk -f'.'
''`ip_host_range_start=`echo $ip_start|awk -f'.'
''`ip_host_range_end=`echo $ip_end|awk -f'.'
''`ip_network_range="
$-$"
ip_host_range="
$-$"
;;*)
echo -e "
\033[31m執行預設配置\033[0m";;
esac
# 模擬線程,超過配置值,等待
function
thread_wait()
# 記憶體保留檢查,小於設定值則等待
function
free_check()
') -lt min_mem ]]
then
sleep2;
free_checkfi}
# 格式化ip並執行ping指令碼
for ip_network in `seq $(echo $ip_network_range|awk -f '-'
'') $(echo $ip_network_range|awk -f '-'
'')`do
thread_wait
for ip_host in `seq $(echo $ip_host_range|awk -f '-'
'') $(echo $ip_host_range|awk -f '-'
'')`do
free_check
(eval "$
") &
done
done
#!/bin/bash# ping batach
ip_prefix="
192.168
"ip_network_range="
1-2"
ip_network_host_range="
1-254
"function
ping_batch()
for i in `seq $(echo $ip_network_range|awk -f '-'
'') $(echo $ip_network_range|awk -f '-'
'')`;do
for j in `seq $(echo $ip_network_host_range|awk -f '-'
'') $(echo $ip_network_host_range|awk -f '-'
'')`;do ping_batch "
$.$.$
";done;done
批量ping指令碼
ping c 1 i表示 只pin g一次。命令解釋 c計 數 co unt 1表示 一次,i 表示只ping一次。命令解釋 c計數 count 1表示一次,i表示只pi ng一次 命令解 釋 c 計數 c ount 1表 示一次,i是ip。grep loss 通過管道的方式查詢ping後的結果含有...
編寫指令碼批量 ping
如果有很多 ip 或者網域名稱,我們要判斷哪些能 ping 通,採用自動化指令碼特別方便。先看指令碼,如下所示 bin bash 功能,ping檔案ip.lst中的ip,成功的輸出到ping ok.lst檔案,失敗的輸出到ping fail.lst檔案。10.1.1.1呼叫該指令碼 ping ip....
bash指令碼併發執行
目錄背景 採用gnu的paralle程式 並行化方法 wait 缺點 程序數可控的並行化方法 命名管道 在linux下執行作業時,經常會遇到以下情形 有大量作業需要執行,完成每個作業所需要的時間也不是很長.如果我們以序列方式來執行這些作業,可能要耗費較長的時間 若採用並行方式執行則可以大大節約執行時...