shell脚本并行多个循环

shell脚本并行多个循环

因为最近在写脚本处理文件,当文件数小的时候,没有感觉太多,但当数量成几何增长,发现处理速度真的跟不上。

脚本执行过程都是串行,一个过程结束接下一个过程,但当一直重复同一个循环过程,是否可以并行循环?百度了一下果然大神多多,厉害了我的哥!因为当时手机浏览的,貌似是在知乎上看到的,这里记录一下。

2个核心点:

(cmd)&:后台运行

wait:等待所有进程结束后再退出

直接贴个代码

脚本功能:ping局域网的存活主机

#!/bin/bash
for ip in 192.168.68.{1..254}
do
	(
		ping  -c 4 $ip >/dev/null 
		if [ $? -eq 0 ];then
			echo "$ip online"
		fi
		)&
done
wait

下面这个稍微做了延伸,根据更加cpu内核数量来并发数量,因为有的时候处理的文件太过庞大,可以加以限制。

FILEPATH=/tmp/1.txt
echo 192.168.68.{1..254} |xargs -n1 > $FILEPATH

LineNUM=`wc -l $FILEPATH|awk '{print $1}'`
CoreNUM=`lscpu|grep "^CPU(s"|awk '{print $NF}'`
TaskNUM=$((LineNUM/CoreNUM+1))


NNN=1
for i in `seq $CoreNUM`
do
sed -n "$NNN,+$((TaskNUM-1))"p  $FILEPATH >${FILEPATH}_$i
NNN=$((TaskNUM+1)) 
done

for ip in `cat ${FILEPATH}_*`
do
	(

		ping  -c 2 $ip >/dev/null 

		if [ $? -eq 0 ];then
			echo "$ip online"
		fi

		)&

done
wait

good good study, day day up!

发表评论

textsms
account_circle
email

shell脚本并行多个循环
因为最近在写脚本处理文件,当文件数小的时候,没有感觉太多,但当数量成几何增长,发现处理速度真的跟不上。 脚本执行过程都是串行,一个过程结束接下一个过程,但当一直重复同一个循…
扫描二维码继续阅读
2022-05-19