[英]Can you run the same loop simultaneously 3 times in a single bash script?
如果你能指出我正确的方向,我相信我最终能弄清楚。
我有一个从 i=1 到 i=75 的循环。 但我最多可以同时运行 3 次,所以我只能在 3 个单独的终端中运行它,如 i=1 到 i=25、i=26 到 i=50、i=51 到 i= 75.
理想情况下,我希望它在同一个脚本中运行,并且对于循环的所有 3 个实例同时运行,并从 i=1 开始并在 i=75 结束,但是没有重叠 i 已经完成或正在由不同的实例完成循环。
示例处理:
循环的结构基本上是这样的
u=0
while [ $u -lt 1000 ]
do
((u++))
i=$1
while [ $i -le $2 ]
do
curl #(that sends begining command $i)
sleep 60
variable1=$(curl $i) #command that outputs a number which can change every 60 seconds
variable2=$(curl $i) #command that outputs a number which is static
counter=0
until [ variable1 -ne $variable2 ]
do
((counter++))
echo waiting 60 seconds
echo times waited: $counter
sleep 60
variable1=$(curl $i) #command that outputs a number which can change every 60 seconds
variable2=$(curl $i) #command that outputs a number which is static
curl #(that sends ending command $i)
((i++))
done
done
我提供了一种简单的方法来完成此操作,并让您根据需要对其进行自定义:
#!/bin/bash
function myLoopFunction {
param1 = $1
param2 = $2
# Some code...
}
myLoopFunction value1a value2a & # Run 1
myLoopFunction value1b value2b & # Run 2
myLoopFunction value1c value2c & # Run 3
wait # Wait for termination...
N=3
for (( i = 0; i < N; i++ ))
do (
switch $i in
0) setup_loop_0 ;;
1) setup_loop_1 ;;
2) setup_loop_2 ;;
esac
echo any commands
sleep 2
echo finish
)& done
wait
笔记:
N=3
定义了并行执行的次数。for (( i = 0; i < N; i++ )); do... done
for (( i = 0; i < N; i++ )); do... done
循环(( i = 1; i <= N; i++ ))
而不是(( i = 0; i < N; i++ ))
来获取变量i
的值 1..3 而不是 0..2。(... )
声明一个子外壳。&
)
在后台启动子 shellwait
一直等到所有子 shell 都终止。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.