欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

分享一個(gè)入門級(jí)可控多線程shell腳本代碼

 更新時(shí)間:2016年02月20日 21:47:50   作者:張戈  
這篇文章主要介紹了分享一個(gè)入門級(jí)可控多線程shell腳本代碼,需要的朋友可以參考下

說到shell可控多線程,網(wǎng)上分享的大部分是管道控制的方案。這種方案,張戈博客也曾經(jīng)實(shí)戰(zhàn)并分享過一次:《Shell+Curl網(wǎng)站健康狀態(tài)檢查腳本,抓出中國博客聯(lián)盟失聯(lián)站點(diǎn)》,感興趣的朋友可以看看。

分享一個(gè)入門級(jí)可控多線程shell腳本方案

下面張戈博客再分享另一種更容易理解的入門級(jí)可控多線程shell腳本方案:任務(wù)切割、各個(gè)擊破。

先來 1 段場(chǎng)景描述:

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

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

簡單思路:

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

具體代碼:

#!/bin/sh
#文本分割函數(shù):將文本$1按份數(shù)$2進(jìn)行分割
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} #參數(shù)1表示分割成多少份即,開啟多少個(gè)線程,默認(rèn)10個(gè)
FILE=${2:-iplist} #參數(shù)2表示分割的對(duì)象,默認(rèn)iplist文件
 
#分割文件
SplitFile $FILE $SPLIT_NUM
 
#循環(huán)遍歷臨時(shí)IP文件
for iplist in $(ls ./SplitFile/*)
do
 #循環(huán)ping測(cè)試臨時(shí)IP文件中的ip(丟后臺(tái))
 cat $iplist | while read ip
 do
 ping -c 4 -w 4 $ip >/dev/null && echo $ip | tee -ai okip.log #ping 可達(dá)的IP則寫入日志
 done & #在while循環(huán)后面加上&符號(hào),讓這個(gè)嵌套循環(huán)在后臺(tái)執(zhí)行
done

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

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

相關(guān)文章

  • Shell正則表達(dá)式驗(yàn)證IP地址

    Shell正則表達(dá)式驗(yàn)證IP地址

    這篇文章主要介紹了Shell正則表達(dá)式驗(yàn)證IP地址,本文給出了多個(gè)方法,并分別給出實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2015-05-05
  • linux shell的輸出效果修改方法(界面顏色)

    linux shell的輸出效果修改方法(界面顏色)

    文本終端的顏色可以使用“ANSI非常規(guī)字符序列”來生成,有時(shí)候想個(gè)性化輸出,就可以參考下面的方法
    2013-01-01
  • Ubuntu中的sudo和su命令介紹

    Ubuntu中的sudo和su命令介紹

    這篇文章介紹了Ubuntu中的sudo和su命令,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • linux命令行bandit使用練習(xí)實(shí)戰(zhàn)

    linux命令行bandit使用練習(xí)實(shí)戰(zhàn)

    這篇文章主要為大家介紹了linux命令行bandit使用練習(xí)實(shí)戰(zhàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • Bash Shell中忽略大小寫的設(shè)置方法

    Bash Shell中忽略大小寫的設(shè)置方法

    這篇文章主要介紹了Bash Shell中忽略大小寫的設(shè)置方法,本文還講解了其它的一些方便輸入命令的設(shè)置,如關(guān)閉顯示隱藏文件、只按一次TAB鍵、搜索歷史命令等技巧,需要的朋友可以參考下
    2015-04-04
  • Shell腳本中判斷輸入變量或者參數(shù)是否為空的方法

    Shell腳本中判斷輸入變量或者參數(shù)是否為空的方法

    這篇文章主要介紹了Shell腳本中判斷輸入變量或者參數(shù)是否為空的方法,本文總結(jié)了5種方法,并分別給出了代碼實(shí)例,需要的朋友可以參考下
    2014-10-10
  • Shell腳本中實(shí)現(xiàn)把輸入的密碼轉(zhuǎn)換為*(星號(hào))的方法

    Shell腳本中實(shí)現(xiàn)把輸入的密碼轉(zhuǎn)換為*(星號(hào))的方法

    這篇文章主要介紹了Shell腳本中實(shí)現(xiàn)把輸入的密碼轉(zhuǎn)換為*(星號(hào))的方法,從而把密碼字符串隱藏起來,比較實(shí)用的一個(gè)功能,在做交互設(shè)計(jì)時(shí)非常有用哦,需要的朋友可以參考下
    2014-06-06
  • 詳解Linux中的awk命令

    詳解Linux中的awk命令

    awk是一個(gè)強(qiáng)大的文本分析工具,相對(duì)于grep的查找,sed的編輯,awk在其對(duì)數(shù)據(jù)分析并生成報(bào)告時(shí),顯得尤為強(qiáng)大。這篇文章主要介紹了Linux中的awk命令的相關(guān)知識(shí),需要的朋友可以參考下
    2019-11-11
  • shell命令while循環(huán)中使用sleep命令代碼示例

    shell命令while循環(huán)中使用sleep命令代碼示例

    這篇文章主要介紹了shell命令while循環(huán)中使用sleep命令代碼示例,分享了相關(guān)代碼示例,小編覺得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-02-02
  • linux shell中“.” 和 “./”執(zhí)行的區(qū)別詳解

    linux shell中“.” 和 “./”執(zhí)行的區(qū)別詳解

    這篇文章主要介紹了linux shell中“.” 和 “./”執(zhí)行的區(qū)別詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05

最新評(píng)論