分享一個入門級可控多線程shell指令碼代碼_linux shell

來源:互聯網
上載者:User

說到shell可控多線程,網上分享的大部分是管道控制的方案。這種方案,張戈部落格也曾經實戰並分享過一次:《Shell+Curl網站健康狀態檢查指令碼,抓出中國部落格聯盟失聯網站》,感興趣的朋友可以看看。

分享一個入門級可控多線程shell指令碼方案

下面張戈部落格再分享另一種更容易理解的入門級可控多線程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 variablesSPLIT_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個線程,速度自然不可同日而語矣。
其中,切割的份數即你想要開啟的多線程數量,很明顯,這種任務分割的思路雖然沒有管道方案來的高大上,但是其思想更加簡單易懂,而且通用性也更好,適合入門級的簡單多線程任務。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.