循环控制以从当前 if 循环中中断

loop control to break from current if loop

我正在尝试循环控制。 while 循环然后是 for 循环,里面有几个 if 循环,如果 3 个 if 循环满足它应该退出 for 循环以继续 while 循环否则它应该退出 if 循环以继续其余的 for 循环迭代

LIMIT=100
while [ "count" -le "$LIMIT" ]
do
    for i in 1 2 3 4 5
    do
        var a
        var b
        var c
        var d
        if [ $d -eq 1 ] && [ $a == Done ] && [ $b -eq 0 ]
        then
         echo "$c" | tr '\n' '\t'
         echo "Successful"
         break 2        # Need to exit entire for loop
        elif [ $d -eq 0 ] && [ $a == Done ] && [ $b -eq 0 ]
        then
         break          # Need to go to next iteration of for
        elif [ $a == Active ]
        then
         echo "Active"  # Need to exit entire for loop
         break 2
        elif [ $d -eq 1 ] && [ $a == Done ] && [ $b -gt 0 ]
        then
         echo "Fail"    # Need to exit entire for loop
         break 2
        elif [ $a == Queued ]
        then
         echo "Queued"  # Need to exit entire for loop
         break 2
        else
         echo "Nothing"
        fi
    done
done

出于某种原因,当第一个 if 循环为真时它会退出所有内容。

知道了,实际上我使用的是 break 2,它正在退出 for 以及 while 就好像已经退出了,所以使用单个 break 可以让我完全退出 for 循环,并继续进行任何循环的下一次迭代如果循环需要使用继续。

所以代码应该是

LIMIT=100
while [ "count" -le "$LIMIT" ]
do
    for i in 1 2 3 4 5
    do
        var a
        var b
        var c
        var d
        if [ $d -eq 1 ] && [ $a == Done ] && [ $b -eq 0 ]
        then
         echo "$c" | tr '\n' '\t'
         echo "Successful"
         break             # will exit entire for loop
        elif [ $d -eq 0 ] && [ $a == Done ] && [ $b -eq 0 ]
        then
         continue          # will go to next iteration of for
        elif [ $a == Active ]
        then
         echo "Active" 
         break             # will exit entire for loop
        elif [ $d -eq 1 ] && [ $a == Done ] && [ $b -gt 0 ]
        then
         echo "Fail"   
         break             # will exit entire for loop
        elif [ $a == Queued ]
        then
         echo "Queued"  
         break             # will exit entire for loop
        else
         echo "Nothing"
        fi
    done
done