for循環的多線程執行
當我們使用for 循環ping 多台主機時,由於是串行執行,所以效率不高。
1,串行執行
#!/bin/bash
#記錄ping 開始時間
echo "$(date +%T) start "> ./time.txt
for i in 192.168.23.{1..25}
do
ping -c 3 -i 0.5 -w 2 $i &> /dev/null #串行執行ping 命令
if [ $? -eq 0 ];then
echo "$i is online" >> ./host_ip_online
else
echo "$i is offline" >> ./host_ip_offline
fi
done
#記錄ping 結束時間
echo "$(date +%T) done" >> ./time.txt
cat ./host_ip_online
cat ./time.txt

2.並行執行
#!/bin/bash
#記錄ping 開始時間
echo "$(date +%T) start "> ./time.txt
for i in 192.168.23.{1..25}
do
{
ping -c 3 -i 0.5 -w 2 $i &> /dev/null #串行執行ping 命令
if [ $? -eq 0 ];then
echo "$i is online" >> ./host_ip_online
else
echo "$i is offline" >> ./host_ip_offline
fi
}& #放入后台並行執行
done
wait #等待后台命令結束,再執行下面的命令
#記錄ping 結束時間
echo "$(date +%T) done" >> ./time.txt
cat ./host_ip_online
cat ./time.txt

