91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何實現可控多線程shell腳本

發布時間:2021-09-16 15:11:04 來源:億速云 閱讀:121 作者:小新 欄目:開發技術

這篇文章將為大家詳細講解有關如何實現可控多線程shell腳本,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

先來 1 段場景描述:

某日,在鵝廠接到了這個任務,需要在Linux服務器中,對幾千個IP進行一次Ping檢測,只要取得ping可達的IP就好。如果單個IP去ping測試,雖然也可以完成任務,幾千個IP還好了,如果更多呢?

鑒于這個case簡單程度,第一時間先放棄了以前用過的管道方案,而是采用了各個擊破的思想。

簡單思路:

按照任務切割的“戰略思想”,我先將這幾千IP存入一個iplist文件,然后寫一個分割函數,將這個文件分成多份臨時IP清單,最后,用多線程遍歷這些臨時IP文件即可變相實現多線程了。

具體代碼:

#!/bin/sh
#文本分割函數:將文本$1按份數$2進行分割
SplitFile()
{
 linenum=`wc -l $1 |awk '{print $1}'`
 if [[ $linenum -le $2 ]]
 then
 echo "The lines of this file is less then $2, Are you kidding me..."
 exit
 fi
 Split=`expr $linenum / $2`
 Num1=1
 FileNum=1
 test -d SplitFile || mkdir -p SplitFile
 rm -rf SplitFile/*
 while [ $Num1 -lt $linenum ]
 do
 Num2=`expr $Num1 + $Split`
 sed -n "${Num1}, ${Num2}p " $1 > SplitFile/$1-$FileNum
 Num1=`expr $Num2 + 1`
 FileNum=`expr $FileNum + 1`
 done
}
 
#Define some variables
SPLIT_NUM=${1:-10} #參數1表示分割成多少份即,開啟多少個線程,默認10個
FILE=${2:-iplist} #參數2表示分割的對象,默認iplist文件
 
#分割文件
SplitFile $FILE $SPLIT_NUM
 
#循環遍歷臨時IP文件
for iplist in $(ls ./SplitFile/*)
do
 #循環ping測試臨時IP文件中的ip(丟后臺)
 cat $iplist | while read ip
 do
 ping -c 4 -w 4 $ip >/dev/null && echo $ip | tee -ai okip.log #ping 可達的IP則寫入日志
 done & #在while循環后面加上&符號,讓這個嵌套循環在后臺執行
done

將代碼保存為ping.sh之后,執行 sh ping.sh iplist 100 的過程如下:
先將iplist切割成100份,存放在 SplitFile 文件夾中

然后,通過for循環讀取這些分割文件,并在后臺使用while循環對其中ip執行ping命令。
由于while是丟后臺的, 所以for循環會一次性執行100個while,相當于開啟了100個線程,速度自然不可同日而語矣。
其中,切割的份數即你想要開啟的多線程數量,很明顯,這種任務分割的思路雖然沒有管道方案來的高大上,但是其思想更加簡單易懂,而且通用性也更好,適合入門級的簡單多線程任務。

關于“如何實現可控多線程shell腳本”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

舞钢市| 恭城| 红安县| 吉木萨尔县| 山东省| 通辽市| 浪卡子县| 泗阳县| 霍州市| 胶南市| 万山特区| 阜平县| 鞍山市| 庆云县| 平江县| 收藏| 河津市| 徐水县| 彩票| 千阳县| 白河县| 临夏市| 资阳市| 吴川市| 龙江县| 格尔木市| 平舆县| 汝阳县| 旬阳县| 云霄县| 中阳县| 龙口市| 大厂| 滨海县| 泾源县| 塘沽区| 洪泽县| 井研县| 府谷县| 高碑店市| 抚州市|