break、continue、exit、return的区别和对比
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的区别和对比的更多相关文章
- 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 ...
- [转帖]Shell脚本中的break continue exit return
Shell脚本中的break continue exit return 转自:http://www.cnblogs.com/guosj/p/4571239.html break结束并退出循环 cont ...
- C语言break/continue/exit/return的功能区别
break是跳出整个循环而执行循环体之外的下一条语句: continue只是跳出本次循环继续判断下一次循环条件是否满足. exit() 结束当前进程/当前程式/,在整个程式中,只要调用 exit ,就 ...
- Shell脚本中的break continue exit return
转自:http://www.cnblogs.com/guosj/p/4571239.html break结束并退出循环 continue在循环中不执行continue下面的代码,转而进入下一轮循环 e ...
- break、continue以及return的区别
break.continue以及return的区别如下: 1.break break用于完全结束一个循环,跳出循环体,不再执行下面的代码.对于多层循环嵌套,如果break语句出现在嵌套循环中的内循环时 ...
- break、continue和return的区别
break.continue和return的区别 break function myBreak() { for(var i = 0; i < 5; i++) { if(i == 3) { bre ...
- js中的break,continue和return的用法及区别
为什么要说个?好像很简单,但是我也会迷糊,不懂有时候为什么要用return,然而break和continue也经常和他放在一起. 所以就一起来说一说,这三个看起来很简单,却常常会出错的关键词的具体用法 ...
- js中退出语句break,continue和return 比较 (转载)
在 break,continue和return 三个关键字中, break,continue是一起的,return 是函数返回语句,但是返回的同时也将函数停止 首先:break和continue两个一 ...
- break , continue , exit
break , continue , exit 例一:#!/bin/bash . /etc/init.d/functions `;do ];then #continue #没有数字3 break #e ...
随机推荐
- BackgroundWorker的使用一二(可视化编程,开始后台工作,报告进度,取消后台工作等)
C# 提供了BackgroundWorker功能非常强大,可以将某项工作放到后台运行,可以让后台报告进度,可以取消后台工作...... BackgroundWorker的上述功能是通过 1. 三个主要 ...
- bzoj1101:[POI2007]ZAP-Queries
[POI2007]ZAP-Queries 题意简述:对于给定的整数a,b和d,有多少正整数对x,y,满足x<=a,y<=b,并且gcd(x,y)=d. Solution 很显然这是一个莫比 ...
- mongodb-CURD
插入 import pymongo conn = pymongo.MongoClient('mongodb://192.168.10.10:27017') mydb = conn['myDB'] my ...
- python 基础(六) 推导式
列表推导式 概念:提供了一种创建列表的简单快速的途径 (1) 一般形式 myList = [x for x in range(10)] #分解后 myList = [] for x in rang ...
- GYM 101889F(树状数组)
bit扫描坐标套路题,注意有重复的点,莽WA了. const int maxn = 1e5 + 5; struct node { ll B, F, D; bool operator < (con ...
- 再看SpringMVC通过一个DispatcherServlet处理Servlet
初始入口: org.springframework.web.context.ContextLoaderListener org.springframework.web.context.ContextL ...
- Oracle 修改密码(忘记登录密码,用户System)
1.修改计算机环境变量,把oracle服务端路径放在最前面 2.输入cmd 3.输入命令:sysplus /nolog SQL>conn sys/syspwd as sysdba SQL> ...
- cookie和session基础以及在Django中应用
看了会视频,终于搞懂了~ 1.cookie cookie:保存状态 cookie的工作原理是:由服务器产生内容,浏览器收到请求后保存在本地:当浏览器再次访问时,浏览器会自动带上cookie,这样服务器 ...
- PMP项目管理学习笔记引言(1)——为啥要取得认证?
(一)为啥要取得认证? 如果你参与过很多项目,就会发现,你总是在周而复始地面对同样的一些问题.一些常见的问题目前已经有了通用解决方案.经过多年的实战,项目经理已们已经掌握了很多应验教训,而通过PMP( ...
- Selenium私房菜系列7 -- 玩转Selenium Server
本篇主要是想更进一步介绍Selenium Server的工作原理,这次我们从Selenium Server的交互模式开始. 在<第一个Selenium RC测试案例>中,我们以命令“jav ...