如何实现可控多线程shell脚本
发表于:2025-01-19 作者:千家信息网编辑
千家信息网最后更新 2025年01月19日,这篇文章将为大家详细讲解有关如何实现可控多线程shell脚本,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。先来 1 段场景描述:某日,在鹅厂接到了这个任务,需要在L
千家信息网最后更新 2025年01月19日如何实现可控多线程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个线程,速度自然不可同日而语矣。
其中,切割的份数即你想要开启的多线程数量,很明显,这种任务分割的思路虽然没有管道方案来的高大上,但是其思想更加简单易懂,而且通用性也更好,适合入门级的简单多线程任务。
关于"如何实现可控多线程shell脚本"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
文件
线程
循环
任务
后台
思想
更多
篇文章
脚本
代码
份数
函数
参数
思路
文本
方案
管道
先将
测试
不错
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
数据库助理
景林网络技术有限公司
农村网络安全宣传总结
switch战争前线连接服务器
飘零3.5服务器
网络技术实现校际资源共享
安卓显示数据库数据代码
承德软件开发互动平台
数据库关系号
服务器和监控辐射很大
成都游戏软件开发公司在哪里
信息网络安全专家论坛
网络安全手抄报二年级字
信息工程大学网络技术侦察
建立数据库表的单词命令
变速齿轮下载软件开发
广州新媒体网络技术有限公司
怎么用网吧服务器玩游戏
软件开发著作权委托人
sql服务器模式
网络安全靠人民 手抄报
我的世界开离线版服务器
台州三拓网络技术有限公司
部队有做软件开发的兵种吗
长沙安卓软件开发价格表
gaussdb数据库整除取余
应援站的数据库怎么弄
web服务器和存储服务器解耦合
打印机的rpc服务器是什么
数据库安全性实验七