循环控制以从当前 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
我正在尝试循环控制。 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