zoukankan      html  css  js  c++  java
  • 十四、循环控制

    一、循环控制命令

    break n
    省略n,表示跳出整个循环;n表示跳出循环的层数
    
    continue n
    省略n,表示跳过本次循环,忽略本次循环的剩余代码,进入下一次的循环;n表示退出到第n层循环
    
    exit n
    退出当前shell程序,n为上一次程序执行的状态返回值。n也可以省略,在下一个shell里可通过"$?"接收exit n的n值
    
    return n
    用于将函数中作为函数的返回值,以判断函数执行是否正确。在下一个shell里可通过"$?"接收exit n的n值

    二、逻辑结构图

    1、break

    2、continue

    3、exit

    三、循环控制测试

    该案例来自于《跟老男孩学Linux运维:shell编程实战》

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

    1、测试break

    [root@node1 scripts]# bash xunhuankongzhi.sh break
    0
    1
    2
    I am in func.   #循环外的结果
    ok              #函数外的结果
    #根据结果可以看到,i等于3及以后的循环没有被执行,但循环外的echo执行了,执行到break时跳出了if及外层的for循环语句,然后执行for循环外部done后面的打印ok的语句。

    2、测试continue

    [root@node1 scripts]# bash xunhuankongzhi.sh continue
    0
    1
    2    #没有打印3
    4
    5
    I am in func.  #循环外的结果
    ok             #函数外的结果
    #可以看到,只有i等于3这层循环没有被执行,其他循环全部执行了,循环外的echo也执行了,说明执行到continue时,终止了本次循环,而继续下一次的循环,直到循环正常结束,接着继续执行了循环外面的所有语句。

    3、测试exit 119

    [root@node1 scripts]# bash xunhuankongzhi.sh "exit 119"    #"exit 119"双引号括起来表示一个参数
    0
    1
    2  #当i=3时就退出了脚本,不在执行脚本以后的任何代码
    [root@node1 scripts]# echo $?
    119 #返回了脚本执行的状态值为119
    #根据执行结果可以看到,当进入test函数循环里的if语句后遇到"exit 119"时,立刻退出程序,不但循环体3后面的数字没有输出,而且for循环体done外的echo和函数外的ok也没有输出,就直接退出了程序。另外,因为程序退出时指定了119,所以执行脚本后获取"$?"的返回值时就返回了"exit 119"后面的119这个数字到当前的Shell。

    4、return

    [root@node1 scripts]# bash xunhuankongzhi.sh "return 119"
    0
    1
    2
    return's exit status:119    #把119返回给了函数外部的脚本
    ok
    [root@node1 scripts]# echo $?
    0
    #当进入test函数循环里的if语句后遇到return 119,就没有打印3以下的数字,说明return跳出了循环体,程序也没有执行for循环体done外的echo命令,而是直接执行了函数test外的if语句及打印ok的命令,可见return的作用是退出当前函数。同时,return将数字119作为函数的执行状态值返还给函数体外,执行脚本后打印返回值是0,因为程序的最后一行是打印ok的命令,执行是成功的。
    I have a dream so I study hard!!!
  • 相关阅读:
    Java类的加载及实例的创建
    快速排序--递归法
    个位数统计
    求最长公共字串
    a标签绑定点击事件失败
    js中取el表达式问题
    springmvc json乱码问题
    tomcat发布时候jar包问题
    Mybatis一对一映射resultMap子标签中顺序问题
    spring和springmvc包扫描问题
  • 原文地址:https://www.cnblogs.com/yaokaka/p/13821160.html
Copyright © 2011-2022 走看看