for 循環的多線程並行執行


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

image-20210720084044502



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

image-20210720084436491


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM