zoukankan      html  css  js  c++  java
  • shell 学习笔记11-break、continue、exit、retrurn学习

    1、说明

    break(循环控制)、continue(循环控制)、exit(退出脚本)、return(退出函数)

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

    "n"的说明

    命令 说明
    break n 不加n表示跳出整个循环,n表示跳出循环的层数
    continue n 不加n表示跳过本次循环,忽略本次循环的剩余代码,进入循环的下一次循环。n表示退到第n层继续循环
    exit n 退出当前shell程序,n为上次程序执行的状态返回值。n也可以省略,在下一个shell里可通过”¥?“接收exit的n植
    return n 用于在函数里做为函数的返回值,以判断函数执行是否正确。在下一个shell里可通过”$?”接收exit n的n植

    2、流程图

    break功能的执行流程图

    while-break

    for-break

    continue功能流程图

    while-continue

    for-continue

    exit功能流程图

    while-exit

    for-exit

    3、基础示例

    脚本

    #!/bin/bash
    if [[ $# -ne 1 ]]; then #<==如果传参数个数不为1,则打印下面的使用提示。
    	#statements
    	echo $"usage:0 {break|continue|exit|return}" #<==分别传入4个命令作为参数
    	exit 1				#<==退出脚本
    fi
    test(){					#<==定义测试函数
    	for (( i = 0; i <= 5; i++ )); do
    		#statements
    		if [[ $i -eq 3 ]]; then
    			#statements
    			$*;			#<==这个地方的"$*"就是接收函数外的参数将来就是{break|continue|exit|return}中的一个
    		fi
    		echo $i
    	done
    	echo "I am in func." #<==循环外的输出提示
    }
    test $*					 #<==这里的”$*“为函数的传参
    func_ret=$?				 #<==接收并测试函数返回值
    if [[ `echo $*|grep return|wc -l` -eq 1 ]]; then #<==如果传参有return
    	#statements
    	echo "return's exit status:$func_ret"		 #<==提示return退出状态
    fi
    echo "ok"										 #<==函数外的输出提示
    
    

    结果

    传入break命令结果

    [root@test1 test]# ./break1.sh 
    usage:0 {break|continue|exit|return}
    [root@test1 test]# ./break1.sh break
    0
    1
    2
    I am in func.  #<==循环外的输出提示
    ok             #<==函数外的输出提示
    

    可以看到,i等于3及以后的循环没有被执行,但循环外的echo执行了,执行到break就跳出if及外层的for循环语句,然后执行for循环外部done后面的打印ok的语句

    传入continue命令结果

    [root@test1 test]# ./break1.sh continue      
    0
    1
    2   #<==没有3
    4
    5
    I am in func.  #<==循环外的输出提示
    ok             #<==函数外的输出提示
    

    可以看到只有i等于3这层没有执行,其他都执行了,循环外的echo也执行了,这个就是说明continue只终止了“3”这次循环

    传入exit命令

    [root@test1 test]# ./break1.sh exit
    0
    1
    2
    

    直接退出shell了

    传入return命令

    [root@test1 test]# ./break1.sh return
    0
    1
    2
    return's exit status:0
    ok
    

    可以看到退出函数,并且提示return退出状态

    传入exit 118与return 118

    [root@test1 test]# ./break1.sh "exit 118"
    0
    1
    2   #<==只打印了0,1,2
    [root@test1 test]# echo $?
    118
    [root@test1 test]# ./break1.sh "return 118"
    0
    1
    2
    return's exit status:118    #<==确实将118返回到了函数的外部脚本
    ok
    [root@test1 test]# echo $?
    0                           #<==执行脚本后的返回值还是0
    [root@test1 test]# 
    

    可以看到了exit 118直接退出循环,也没有函数外的ok输出,指定的返回值118
    可以看到了return 118,退出了函数,并且输出函数外的返回值118,和ok输出

    转载请注明出处:https://www.cnblogs.com/zhangxingeng/p/12524324.html

  • 相关阅读:
    TriSun PDF to X v11.0 Build 061
    资源管理器 Q-Dir v8.09
    USB启动盘创建工具 Rufus
    Docker:网络模式详解
    rsync使用实践
    MySQL 8.0 防止暴力破解
    MySQL-8.0.19 优化日志及压测
    MySQL入门篇之mysqldump参数说明
    rest-framework之视图
    rest-framework之权限组件
  • 原文地址:https://www.cnblogs.com/zhangxingeng/p/12524324.html
Copyright © 2011-2022 走看看