zoukankan      html  css  js  c++  java
  • 流程控制 -- 跳出循环

    Shell break和continue命令

    在循环过程中,有时候需要在未达到循环结束条件时强制跳出循环,像大多数编程语言一样,Shell也使用 break 和 continue 来跳出循环。

    break命令

    break命令允许跳出所有循环(终止执行后面的所有循环)。

    下面的例子中,脚本进入死循环直至用户输入数字大于5。要跳出这个循环,返回到shell提示符下,就要使用break命令。

    #!/bin/bash
    while :do    
    	echo -n "Input a number between 1 to 5: "    
    	read aNum    
    case $aNum in        
    1|2|3|4|5) 
    	echo "Your number is $aNum!"        
    	;;        
    *) 
    	echo "You do not select a number between 1 to 5, game is over!"            	
    	break        
    	;;    
    esac
    done
    

    在嵌套循环中,break 命令后面还可以跟一个整数,表示跳出第几层循环。例如:

    break n
    

    表示跳出第 n 层循环。

    下面是一个嵌套循环的例子,如果 var1 等于 2,并且 var2 等于 0,就跳出循环:

    #!/bin/bash
    for var1 in 1 2 3
    do   
    	for var2 in 0 5   
    	do      
    		if [ $var1 -eq 2 -a $var2 -eq 0 ]      
    		then         
    			break 2      
    		else         
    			echo "$var1 $var2"      
    		fi   
    	done
    done
    

    如上,break 2 表示直接跳出外层循环。运行结果:

    1 0
    1 5
    

    continue命令

    continue命令与break命令类似,只有一点差别,它不会跳出所有循环,仅仅跳出本次循环

    对上面的例子进行修改:

    #!/bin/bash
    while :do    
    	echo -n "Input a number between 1 to 5: "    
    	read aNum    
    	case $aNum in        
    	1|2|3|4|5) 
    		echo "Your number is $aNum!"        
    		;;        
    	*) 
    		echo "You do not select a number between 1 to 5!"            
    		continue            
    		echo "Game is over!"        
    		;;    
    	esac
    done
    

    运行代码发现,当输入大于5的数字时,该例中的循环不会结束,语句

    ...
    echo "Game is over!"
    ...
    

    永远不会被执行。

    同样,continue 后面也可以跟一个数字,表示跳出第几层循环

    再看一个 continue 的例子:

    #!/bin/bash
    NUMS="1 2 3 4 5 6 7"
    for NUM in $NUMS
    do   
    	Q=`expr $NUM % 2`   
    	if [ $Q -eq 0 ]   
    	then      
    		echo "Number is an even number!!"      
    		continue   
    	fi   
    	echo "Found odd number"
    done
    

    运行结果:

    Found odd number
    Number is an even number!!
    Found odd number
    Number is an even number!!
    Found odd number
    Number is an even number!!
    Found odd number
    

    总结

    #break与直接修改条件为不成立的区别
    #!/bin/bash
    count=0
    while [ $count -lt 30 ];do
            echo $count
            ((count++))
            if [ $count -eq 10 ];then
                    break
                    echo "我运行了"
            fi
    done
    
    #!/bin/bash
    count=0
    while [ $count -lt 30 ];do
            echo $count
            ((count++))
            if [ $count -eq 10 ];then
                    count=100
                    echo "我运行了"
            fi
    done
    echo "我运行了"
    
    #break与continue的区别
    #!/bin/bash
    count=0
    while [ $count -lt 30 ];do
            echo $count
            ((count++))
            if [ $count -eq 10 ];then
                    continue
                    echo "我运行了"
            fi
    done
    
    
    
  • 相关阅读:
    hdu 5646 DZY Loves Partition
    bzoj 1001 狼抓兔子 平面图最小割
    poj 1815 Friendship 最小割 拆点 输出字典序
    spoj 1693 Coconuts 最小割 二者取其一式
    hdu 5643 King's Game 约瑟夫环变形
    约瑟夫环问题
    hdu 5642 King's Order
    CodeForces 631C Report
    1039: C语言程序设计教程(第三版)课后习题9.4
    1043: C语言程序设计教程(第三版)课后习题10.1
  • 原文地址:https://www.cnblogs.com/syy1757528181/p/13603808.html
Copyright © 2011-2022 走看看