2017-03-02 54 views
0

我想循环控制。 while循环然后一个for循环,在它里面有几个if循环,如果if循环3满足它应该退出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 

由于某种原因,如果循环为真,它会先退出。

回答

0

明白了,实际上我使用的是break 2,它正在退出,因为如果已经退出,所以使用single break会让我完全退出循环,并继续下一次迭代if循环需要使用继续。

所以代码应该是

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