• 三、shell -break、continue、exit、return


    一、shell -break、continue、exit、return

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

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

    for ((i=1;i<5;i++ ))
    do
      if [ $i -eq 3 ]
      then
      #  break
      #  continue
      #  exit
      fi
      echo $i
    done
    echo OK
    
    break输出的结果
    1
    2
    OK
    continue输出的结果
    1
    2
    4
    OK
    exit输出的结果
    1
    2
    
    #!/bin/bash
    dir=/root/shell
    grep -e '^ .*cp ' -e '^cp' $dir/*  >Cp_Check.txt
    if [ ! -s Cp_Check.txt ]
      then
      return 0
      fi
    #直接执行脚本是会报错的,return仅用于函数中:
    #return: can only`return' from a function or sourced script   
      
    

    总结return 与 exit的区别

    1、exit用于在程序运行的过程中随时结束程序,exit的参数是返回给OS的。exit是结束一个进程,它将删除进程使用的内存空间,同时把错误信息返回父进程。而return是返回函数值并退出函数
    2、return是语言级别的,它表示了调用堆栈的返回;而exit是系统调用级别的,它表示了一个进程的结束。

    二、附录例程:

    参考:https://www.cnblogs.com/moox/p/12886517.html

    #!/bin/bash
    if [ $# -ne 1 ];then
        echo $"usage: $0 {break|continue|exit|return}"
        exit 1
    fi
    function test(){
        for((i=0;i<=5;i++))
        do
    	if [ $i -eq 3 ];then
    	    $*;
    	fi
    	echo $i
        done
        echo "I am in func"
    }
    test $*
    func_ret=$?
    if [ `echo $*|grep return|wc -l` -eq 1 ];then
        echo "return's exit status: $func_ret"
    fi
    echo "OK"
    
    [root@zabbix 0513]# sh test.sh break
    0
    1
    2
    I am in func     === 传入break时,退出test函数,继续顺序执行test函数以下的
    OK
    
    [root@zabbix 0513]# sh test.sh continue
    0
    1
    2	===下面没有3,直接跳过了
    4
    5
    I am in func
    OK
    
    [root@zabbix 0513]# sh break.sh "exit 119"
    0
    1
    2  === 直接退出shell
    [root@zabbix 0513]# echo $?
    119  === 返回了119,即传入的值
    
    [root@zabbix 0513]# sh break.sh "return 119"
    0
    1
    2
    return's exit status: 119
    OK
    
  • 相关阅读:
    hdu5056(找相同字母不出现k次的子串个数)
    POJ 3613 快速幂+Floyd变形(求限制k条路径的最短路)
    POJ 3613 快速幂+Floyd变形(求限制k条路径的最短路)
    Poj 3522 最长边与最短边差值最小的生成树
    Poj 3522 最长边与最短边差值最小的生成树
    POJ 1716 区间最小点个数
    POJ 1716 区间最小点个数
    POJ 1679 判断最小树是否唯一
    POJ 1679 判断最小树是否唯一
    hdu 5020 求三点共线的组合数(容器记录斜率出现次数)
  • 原文地址:https://www.cnblogs.com/retry/p/13864812.html
Copyright © 2020-2023  润新知