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植 基础示例 脚本 #!/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输出