跳出循环,返回到具有正确变量值的循环开头

跳出循环,返回到具有正确变量值的循环开头

我正在向服务器发送进程,但我只想一次运行一定数量的进程。因此,我循环检查正在运行的作业数量,并且仅在当前作业数量不超过某种程度时才提交新作业。为此,我需要等待当前队列已满,以提交更多作业。

我想知道如何通过以下方式实现这一目标:

#!/bin/bash

for i in `seq 10`; do
    if [ condition1 -le condition2 ]; do
        #>>> Submit jobs
    else
        # SERVER IS FULL
        #
        # Wait 10min and try again, by returning to start of the loop
        # with the current value of $i intact
        sleep 10m 
done

如果我的直觉是正确的,上面的循环将在下次尝试$(($i + 1))服务器是否已满$i,从而留下一些未处理的作业。

对于如何处理这个问题有什么建议吗?即我怎样才能跳出第二个子句(else)并返回到循环的开头。

答案1

一个简单的解决方案是稍微改变你的逻辑:

i=1;
while [ "$i" -le 10 ]; do
    if [ condition1 -le condition2 ]; do
        #>>> Submit jobs

        ## Increment the value of $i if a job was submitted
        i=$((i+1))
    else
        # SERVER IS FULL
        #
        # Wait 10min and try again, by returning to start of the loop
        # with the current value of $i intact
        sleep 10m 
done

这样,$i只有在提交作业时才会递增。如果服务器已满,脚本将等待 10 分钟并使用相同的 值重复$i

相关内容