最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

分享一個入門級可控多線程shell腳本代碼

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

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

分享一個入門級可控多線程shell腳本方案

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

先來 1 段場景描述:

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

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

簡單思路:

按照任務(wù)切割的“戰(zhàn)略思想”,我先將這幾千IP存入一個iplist文件,然后寫一個分割函數(shù),將這個文件分成多份臨時IP清單,最后,用多線程遍歷這些臨時IP文件即可變相實現(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表示分割成多少份即,開啟多少個線程,默認(rèn)10個
FILE=${2:-iplist} #參數(shù)2表示分割的對象,默認(rèn)iplist文件
 
#分割文件
SplitFile $FILE $SPLIT_NUM
 
#循環(huán)遍歷臨時IP文件
for iplist in $(ls ./SplitFile/*)
do
 #循環(huán)ping測試臨時IP文件中的ip(丟后臺)
 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)后面加上&符號,讓這個嵌套循環(huán)在后臺執(zhí)行
done

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

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

相關(guān)文章

  • shell中嵌套執(zhí)行expect命令實例

    shell中嵌套執(zhí)行expect命令實例

    這篇文章主要介紹了shell中嵌套執(zhí)行expect命令實例,一直都想把expect的操作寫到bash腳本里,這樣就不用我再寫兩個腳本來執(zhí)行了,需要的朋友可以參考下
    2014-12-12
  • 創(chuàng)建Linux系統(tǒng)服務(wù)的方法

    創(chuàng)建Linux系統(tǒng)服務(wù)的方法

    這篇文章主要介紹了通過linux sh創(chuàng)建Linux系統(tǒng)服務(wù)的方法,需要的朋友可以參考下
    2014-01-01
  • linux中的vi和vim編輯器操作方法

    linux中的vi和vim編輯器操作方法

    這篇文章主要介紹了linux中的vi和vim編輯器操作方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值 ,需要的朋友可以參考下
    2019-05-05
  • shell中的各種括號的使用方法

    shell中的各種括號的使用方法

    這篇文章主要介紹了shell中的各種括號的使用方法,需要的朋友可以參考下
    2015-01-01
  • Linux 中可重入函數(shù)與不可重入函數(shù)詳解

    Linux 中可重入函數(shù)與不可重入函數(shù)詳解

    這篇文章主要介紹了Linux 中可重入函數(shù)與不可重入函數(shù)詳解的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • linux Nginx 日志腳本

    linux Nginx 日志腳本

    這篇文章主要介紹了nginx日志切割腳本、nginx日志分析腳本等,需要的朋友可以參考下
    2013-11-11
  • Shell中sed編輯器的具體使用

    Shell中sed編輯器的具體使用

    sed是一種流編輯器,sed編輯器可以根據(jù)命令來處理數(shù)據(jù)流中的數(shù)據(jù),本文就來介紹一下Shell中sed編輯器的具體使用,具有一定的參考價值,感興趣的可以了解一下
    2024-01-01
  • linux禁止普通用戶切換至root用戶的實例講解

    linux禁止普通用戶切換至root用戶的實例講解

    今天小編就為大家分享一篇linux禁止普通用戶切換至root用戶的實例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • Linux查看端口占用的幾種常用命令

    Linux查看端口占用的幾種常用命令

    這篇文章主要介紹了Linux查端口占用的幾個常用命令,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2023-09-09
  • linux實現(xiàn)解壓.tar.gz文件的示例詳解

    linux實現(xiàn)解壓.tar.gz文件的示例詳解

    這篇文章主要為大家詳細(xì)介紹了linux實現(xiàn)解壓.tar.gz文件的相關(guān)知識,文中的示例代碼簡潔易懂,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-08-08

最新評論

江阴市| 桐庐县| 常山县| 大竹县| 饶阳县| 万安县| 广饶县| 齐河县| 济宁市| 玛沁县| 莱州市| 西乌珠穆沁旗| 洛川县| 江阴市| 新巴尔虎右旗| 九龙坡区| 高青县| 东乌珠穆沁旗| 抚松县| 安西县| 深水埗区| 酒泉市| 余江县| 应用必备| 基隆市| 微山县| 安西县| 汝州市| 无锡市| 龙山县| 伽师县| 依安县| 奉节县| 陵水| 南平市| 堆龙德庆县| 大渡口区| 五台县| 光泽县| 大悟县| 上林县|