break、continue、exit、return的区别和对比

一:说明

break、continue在条件循环语句及循环语句(for、while、if等)中用于控制程序的走向;而exit则用于种植所有语句并退出当前脚本,除此之外,exit还可以返回上一级程序或命令的执行状态值给当前shell;return类似于exit,只不过return仅用于在函数内部返回函数执行的状态值。

break n

如果省略n,则表示跳出整个循环,n表示跳出循环的层数;

continue n

如果省略n,则表示跳出本次循环,忽略本次循环的剩余代码,进入循环的下一次循环,n表示退到第n层继续循环;

exit n

退出当前shell程序,n为上一次程序执行的状态返回值。n也可以省略,在下一个shell里可以通过"$?"接收exit n的n值;

return

用于在函数里作为函数的返回值,以判断函数执行是否正确,在下一个shell里可以通过"$?"接收exit n的n值;

二、break、continue、exit功能执行流程图

这里以while循环和for循环为例来说明:

1、在循环中break功能的执行流程逻辑图如下:

2、在循环中continue功能的执行流程逻辑图:

3、在循环中exit功能的执行流程逻辑图:

三、break、continue、exit、return命令的示例:

说明:通过break命令跳出整个循环,执行循环下面的其他程序。

#!/bin/bash

#通过break命令跳出整个循环,执行循环下面的其他程序;

 if [ $# -ne  ];then    #如果传参个数不为1,则打印下面的使用提示给用户;

     echo $"usage:$0 {break|continue|exit|return}"    #分别传入4个命令作为参数;

     exit     #退出脚本

 fi 

#定义测试函数;

 test(){

     for((i=; i<=; i++))

     do

         if [ $i -eq  ] ;then

             $*;        #$*是接收函数外的参数,将来就是{break|continue|exit|return}中的一个;

         fi

         echo $i

     done

     echo "I am in func."

 }

 test $*    #这里的$*为函数的传参;

 func_ret=$?    #接收并测试函数返回值;

 if [ `echo $*|grep return|wc -l` -eq  ]    #如果传参有return;

     then    

         echo "return's exit status:$func_ret"    #则提示return退出状态;

 fi

 echo "ok"        #函数外的输出提示; 

传入break命令的执行结果为:

 [root@shell ~]# sh --.sh

 usage:--.sh {break|continue|exit|return}

 [root@shell ~]# sh --.sh break

 I am in func.

 ok 

说明:i等于3及以后的循环没有被执行,但循环外的echo执行了,执行到break时跳出了if及外层的for循环语句,然后执行for循环外部done后面的的打印OK的语句。

传入continue命令的执行结果为:

 [root@shell ~]# sh --.sh continue

 I am in func.

 ok 

说明:只有i等于3这层循环没有被执行,其他循环全部执行了,循环外的echo也执行了,说明执行到continue时,终止了本次循环,而继续下一次的循环,直到循环正常结束,接着继续执行了循环外外面的所有语句。

3传入exit 119命令的执行结果为:

 [root@shell ~]# sh --.sh "exit 119"

 [root@shell ~]# echo $?

说明:当进入循环里的if语句后遇到"exit 119"时,立刻退出程序,不但循环体3后面的数字没有输出,而for循环体done外面的echo函数和函数外的OK也没有输出,就直接退出了程序。另外,因程序退出指定了119,所以执行脚本后获取"echo $?"的返回值就返回了"exit 119"后面的119这个数字到当前的shell。

传入return 119命令的执行结果为:

 [root@shell ~]# sh --.sh "return 119"

 return's exit status:119

 ok

 [root@shell ~]# echo $?

说明:当进入循环里的if语句后遇到return 119,就没有打印3以下的数字,说明return跳出了循环体,程序也没有执行for循环体done外的echo命令,而是直接执行了函数test外的if语句及打印OK的命令,可见return的作用是退出当前函数。同时,return将数字119作为函数的执行状态值返还给函数体外,执行脚本后打印返回值是0,因为程序的最后一行是打印OK的命令,执行时成功的。

break、continue、exit、return的区别和对比的更多相关文章

  1. break continue exit return 的区别

    [root@localhost day1]# cat ss.sh #!/bin/bash for ((i=0;i<5;i++)) do if [ $i -eq 3 ] then break #c ...

  2. [转帖]Shell脚本中的break continue exit return

    Shell脚本中的break continue exit return 转自:http://www.cnblogs.com/guosj/p/4571239.html break结束并退出循环 cont ...

  3. C语言break/continue/exit/return的功能区别

    break是跳出整个循环而执行循环体之外的下一条语句: continue只是跳出本次循环继续判断下一次循环条件是否满足. exit() 结束当前进程/当前程式/,在整个程式中,只要调用 exit ,就 ...

  4. Shell脚本中的break continue exit return

    转自:http://www.cnblogs.com/guosj/p/4571239.html break结束并退出循环 continue在循环中不执行continue下面的代码,转而进入下一轮循环 e ...

  5. break、continue以及return的区别

    break.continue以及return的区别如下: 1.break break用于完全结束一个循环,跳出循环体,不再执行下面的代码.对于多层循环嵌套,如果break语句出现在嵌套循环中的内循环时 ...

  6. break、continue和return的区别

    break.continue和return的区别 break function myBreak() { for(var i = 0; i < 5; i++) { if(i == 3) { bre ...

  7. js中的break,continue和return的用法及区别

    为什么要说个?好像很简单,但是我也会迷糊,不懂有时候为什么要用return,然而break和continue也经常和他放在一起. 所以就一起来说一说,这三个看起来很简单,却常常会出错的关键词的具体用法 ...

  8. js中退出语句break,continue和return 比较 (转载)

    在 break,continue和return 三个关键字中, break,continue是一起的,return 是函数返回语句,但是返回的同时也将函数停止 首先:break和continue两个一 ...

  9. break , continue , exit

    break , continue , exit 例一:#!/bin/bash . /etc/init.d/functions `;do ];then #continue #没有数字3 break #e ...

随机推荐

  1. Qt 2D绘图之二:抗锯齿渲染和坐标系统

    一.抗锯齿渲染 1.1 逻辑绘图 图形基元的大小(宽度和高度)始终与其数学模型相对应,下图示意了忽略其渲染时使用的画笔的宽度的样子. 1.2 物理绘图(默认情况) 在默认的情况下,绘制会产生锯齿,并且 ...

  2. Count on a tree II SPOJ - COT2 && bzoj1086 王室联邦 && bzoj2589

    https://cn.vjudge.net/problem/SPOJ-COT2 这个是树上莫队模版啊.. 树上莫队有两种,第一种就是括号序莫队 设节点i在括号序中首次出现位置为pl[i] 那么路径(i ...

  3. oracle把一个表的数据复制到另一个表中

    http://blog.csdn.net/my_name_nb/article/details/64128015 ........................ 1. 新增一个表,通过另一个表的结构 ...

  4. 541 Reverse String II 反转字符串 II

    给定一个字符串和一个整数 k,你需要对从字符串开头算起的每个 2k 个字符的前k个字符进行反转.如果剩余少于 k 个字符,则将剩余的所有全部反转.如果有小于 2k 但大于或等于 k 个字符,则反转前 ...

  5. java isAssignableFrom instanceof 小结 专题

    一句话总结: isAssignableFrom()方法是从类继承的角度去判断,instanceof()方法是从实例继承的角度去判断. public native boolean isAssignabl ...

  6. JAVA吃货联盟项目。

    1基础通过数组.选择结构.循环等实 现吃货联盟订餐系统. 1.我要订餐: 2.查看餐袋: 3.签收订单: 4.删除订单: 5.我要点赞: 6.退出系统: public class Doy001 { p ...

  7. oop典型应用,代码。

    遍历获得一个实体类的所有属性名,以及该类的所有属性的值.//先定义一个类: public class User{ public string name { get; set; } public str ...

  8. PostgresSQL 数组包含@>

    原文链接:http://www.postgresql.org/docs/9.5/static/functions-array.html 9.18. Array Functions and Operat ...

  9. django创建超级用户

    终端输入 python3 manage.py createsuperuser 按照提示进行操作即可 不输入用户名会给你默认一个用户名,输入密码是在原处不动的,其实已经在输入了. 创建超级用户是为了能够 ...

  10. Volley源码解析(三) 有缓存机制的情况走缓存请求的源码分析

    Volley源码解析(三) 有缓存机制的情况走缓存请求的源码分析 Volley之所以高效好用,一个在于请求重试策略,一个就在于请求结果缓存. 通过上一篇文章http://www.cnblogs.com ...