十四、循环控制

一、循环控制命令

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的命令,执行是成功的。

 

posted @ 2020-10-15 16:06  yaowx  阅读(267)  评论(0编辑  收藏  举报