【8】shell:跳出循环 continue、break、continue、return、exit

本文详细介绍了Shell脚本中的控制结构,包括break、continue、exit和return的用法。break用于跳出整个循环,continue则用于结束本次循环并继续下一次。exit命令用于退出Shell程序并返回指定状态值,而return仅适用于函数,表示函数返回值。通过实例演示,清晰地展示了它们各自的效果和区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、break:跳出整个循环


  • 原理示意图
    在这里插入图片描述
  • 详解:

break n

n 表示跳出循环的层数,如果省略 n,则表示跳出当前的整个循环。break 关键字通常和 if 语句一起使用,即满足条件时便跳出循环。

  • 实例演示

如果 break 后面不跟数字的话,表示跳出当前循环,对于有两层嵌套的循环,就得使用两个 break 关键字。例如,输出一个 4*4 的矩阵:

$ cat 1.sh
#!/bin/bash
i=0
while ((++i)); do  #外层循环
    if((i>4)); then
        break  #跳出外层循环
    fi
    j=0;
    while ((++j)); do  #内层循环
        if((j>4)); then
            break  #跳出内层循环
        fi
        printf "%-4d" $((i*j))
    done
    printf "\n"
done

$ sh 1.sh 
1   2   3   4   
2   4   6   8   
3   6   9   12  
4   8   12  16

当 j>4 成立时,执行第二个 break,跳出内层循环;外层循环依然执行,直到 i>4 成立,跳出外层循环。内层循环共执行了 4 次,外层循环共执行了 1 次。

我们也可以在 break 后面跟一个数字,让它一次性地跳出两层循环,请看下面的代码:

#!/bin/bash
i=0
while ((++i)); do  #外层循环
    j=0;
    while ((++j)); do  #内层循环
        if((i>4)); then
            break 2  #跳出内外两层循环
        fi
        if((j>4)); then
            break  #跳出内层循环
        fi
        printf "%-4d" $((i*j))
    done
    printf "\n"
done

修改后的代码将所有 break 都移到了内层循环里面。读者需要重点关注break 2这条语句,它使得程序可以一次性跳出两层循环,也就是先跳出内层循环,再跳出外层循环。

二、continue:跳出本次循环,继续下一次循环


  • 原理示意图
    在这里插入图片描述
  • 详解:

continue n

n 表示循环的层数:

如果省略 n,则表示 continue 只对当前层次的循环语句有效,遇到 continue 会跳过本次循环,忽略本次循环的剩余代码,直接进入下一次循环。

如果带上 n,比如 n 的值为 2,那么 continue 对内层和外层循环语句都有效,不但内层会跳过本次循环,外层也会跳过本次循环,其效果相当于内层循环和外层循环同时执行了不带 n 的 continue。这么说可能有点难以理解,稍后我们通过代码来演示。

  • 实例演示

使用 continue 跳出多层循环,请看下面的代码:

$ cat 1.sh
#!/bin/bash
for((i=1; i<=5; i++)); do
    for((j=1; j<=5; j++)); do
        if((i*j==12)); then
            continue 2
        fi
        printf "%d*%d=%-4d" $i $j $((i*j))
    done
    printf "\n"
done

$ sh 1.sh 
1*1=1   1*2=2   1*3=3   1*4=4   1*5=5   
2*1=2   2*2=4   2*3=6   2*4=8   2*5=10  
3*1=3   3*2=6   3*3=9   4*1=4   4*2=8   5*1=5   5*2=10  5*3=15  5*4=20  5*5=25 

从运行结果可以看出,遇到continue 2时,不但跳过了内层 for 循环,也跳过了外层 for 循环。

三、exit:退出shell程序,并返回n值


exit 是一个 Shell 内置命令,用来退出当前 Shell 进程,并返回一个退出状态;使用$?可以接收这个退出状态;

exit 命令可以接受一个整数值作为参数,代表退出状态。如果不指定,默认状态值是 0。

一般情况下,退出状态为 0 表示成功,退出状态为非 0 表示执行失败(出错)了。

exit 退出状态只能是一个介于 0~255 之间的整数,其中只有 0 表示成功,其它值都表示失败。

Shell 进程执行出错时,可以根据退出状态来判断具体出现了什么错误,比如打开一个文件时,我们可以指定 1 表示文件不存在,2 表示文件没有读取权限,3 表示文件类型不对。

编写下面的脚本,并命名为 test.sh:

#!/bin/bash
echo "befor exit"
exit 8
echo "after exit"

运行该脚本:

[mozhiyan@localhost ~]$ bash ./test.sh
befor exit

可以看到,"after exit"并没有输出,这说明遇到 exit 命令后,test.sh 执行就结束了。

四、return:表示函数返回值


【注意】retrun 命令不能直接用在脚本的主程序里

  • 主要用途:

    使得shell函数退出并返回数值,如果没有指定 n 的值,则默认为函数最后一条命令执行的返回状态。

  • 返回值:
    返回值为你指定的参数n的值,如果你指定的参数大于255或小于0,那么会通过加或减256的方式使得返回值总是处于0到255之间。
    在函数外执行return语句会返回失败。

    实例演示:

    #!/usr/bin/env bash
    # 定义一个返回值大于255的函数
    example() {
      return 259
    }
    # 执行函数
    example
    # 显示3	(259-256=3)
    echo $?
    

五、区别


  • break 与 continue 的区别

    1、break 用来结束所有循环,循环语句不再有执行的机会;

    2、continue 用来结束本次循环,直接跳到下一次循环,如果循环条件成立,还会继续循环。

  • return 与 exit 的区别:

    1、exit用于在程序运行的过程中随时结束程序,exit的参数是返回给OS的。exit是结束一个进程,它将删除进程使用的内存空间,同时把错误信息返回父进程。而return是返回函数值并退出函数

    2、return是语言级别的,它表示了调用堆栈的返回;而exit是系统调用级别的,它表示了一个进程的结束。

    3、使用方法不用。return一般用在函数方法体内,exit可以出现在Shell脚本中的任意位置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值