shell脚本中使用for循环开启并行方法

大家经常使用for循环来給指定脚本输入参数,按照参数的输入顺序脚本顺序执行,如以下脚本:

for (( i = 1; i <= 999; i++ ))
do
	sh diaoyong.sh $i 
done

把1-999不停输入diaoyong.sh脚本中,该脚本要循环999次才能执行完成,执行效率极慢,我们可以使用for循环中的并行,根据输入的参数,同时执行多个任务,但是这种会同时开启999个任务,为了不让主机宕机,还是不能使用这种方法

for (( i = 1; i <= 999; i++ ))
do
	{	sh diaoyong.sh $i
	}&
done

所以,如何控制同时执行的任务个数呢?可以参考以下方法!

例如:同时开启10个任务,待10个任务执行完毕后开启下一轮十个任务,如下:

1,编写一个txt文档,把要输入的参数按顺序十个一行排列,如下:

1 2 3 4 5 6 7 8 9 10
11 12 13 14 15 16 17 18 19 20
21 22 23 24 25 26 27 28 29 30
31 32 33 34 35 36 37 38 39 40
... 

2,编写脚本,如下:

#!/bin/bash
stime=`date +%s` 
#脚本开始执行时间
echo `date +%F\ %T` start
for (( i = 1; i < 99; i++ ))
do
	prov=`cat tbs.txt|awk "NR==$i{print}"|awk '{print $1" "$2" "$3" "$4" "$5" "$6" "$7" "$8" "$9" "$10}'`	
         #读取第一行所有参数
	echo $prov
	for db in $prov
	do
	echo `date +%F\ %T` start $db
	{	sh diaoyong.sh $db > log/log.$db 2>&1
	}&
	done
wait
#等待第一行任务执行完毕开始执行下一行
 done
etime=`date +%s`

s=`echo "scale=0; ($etime - $stime)%60" | bc`
m=`echo "scale=0; ($etime - $stime)/60%60" | bc`
h=`echo "scale=0; ($etime - $stime)/60/60" | bc`

echo `date +"%F %T"` end 耗时 $h 小时 $m 分钟 $s 秒

 

 

 

 

  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值