美文网首页
【Shell】函数

【Shell】函数

作者: HeloWxl | 来源:发表于2023-04-25 09:28 被阅读0次

    函数

    1、语法

    函数定义语法如下:

    [ function ] funname [()] {
        action;
        [return int;]
    }
    

    说明 :

    1. 函数定义时,function 关键字可有可无。

    2. 函数返回值 - return 返回函数返回值,返回值类型只能为整数(0-255),如果函数的返回值超过255,超出时值将为除以256取余。如果不加 return 语句,shell 默认将以最后一条命令的运行结果,作为函数返回值。

    3. 函数返回值在调用该函数后通过 $? 来获得。

    4. 所有函数在使用前必须定义。这意味着必须将函数放在脚本开始部分,直至 shell 解释器首次发现它时,才可以使用。调用函数仅使用其函数名即可。

      #!/usr/bin/env bash
      
      f1
      
      f1(){
       echo "f11"
      }
      # 这样子 就会报错
      

    注意:当一个shell脚本里面定义了两个相同名的函数,最终的结果只会显示最后一个。

    2、无参数

    示例:

    无返回值

    #!/usr/bin/env bash
    # function 可省略
    function calc(){
        echo " Hello World"
    }
    
    calc
    echo "the result is: $?" # $? 获取 calc 函数返回值
    
    # 返回结果:
    #Hello World
    #the result is: 0
    

    有返回值

    #!/usr/bin/env bash
    test(){
        read -p " 请输入一个数字: " num
        return $[$num*2]
    }
    test
    echo "this function test  return value is " $?
    
    # 返回结果:
    # 请输入一个数字: 10
    # this function test  return value is  20
    
    # 返回结果:
    # 请输入一个数字: 1000
    # this function test  return value is  208
    
    

    3、函数传参

    在Shell中,调用函数时可以向其传递参数。在函数体内部,通过 $n的形式来获取参数的值,例如,$1表示第一个参数,$2表示第二个参数…即使用位置参数来实现参数传递。
    
    #!/usr/bin/env bash
    
    add(){
        let sum=$1+$2
        return $sum
    }
    
    add $1 $2
    
    echo "this function add  return value is " $?
    
    # 返回结果
    # ./add.sh 1 3
    # this function add  return value is  4
    
    

    4、函数变量的作用范围

    1. 函数在shell脚本中仅在当前shell环境中有效

    2. Shell脚本中变量默认全局有效

    3. 将变量限定在函数内部使用local命令

      1. 函数内部变量通过local来实现
      2. 通过定义myfun函数,在其内部设置局部变量i
      3. 函数内部和外部分别赋值,进行结果验证。

    ps:

    **全局变量代表整体可以使用**
    
    **局部变量代表的是全局变量里面可以使用其中一部分**
    

    示例

    #!/usr/bin/env bash
    
    test(){
        local i
        i=6
        echo $i
    }
    
    i=8
    test
    echo " i value is " $i
    
    # 返回结果:
    # 6
    # i value is  8
    

    如果把 local 去除掉,则返回的结果如下所示:

    #6
    #i value is  6
    

    5、位置参数

    位置参数是在调用一个函数并传给它参数时创建的变量。

    位置参数变量表:

    变量 描述
    $0 脚本名称
    $1...$9 第1个参数到地9个参数列表
    ${10}...${n} 第 10 个到 N 个参数列表
    $* or $@ 除了$0 外的所有位置参数
    $# 不包括$0在内的位置参数的个数
    $FUNCNAME 函数名称(仅在函数内部有值)

    示例

    #!/usr/bin/env bash
    
    test(){
        let sum=$1+$2
        echo "脚本名称" $0
        echo "函数名称" $FUNCNAME
        echo "除了$0外的所有位置参数" $@
        echo "除了$0外的所有位置参数" $*
        echo "不包括$0在内的位置参数的个数" $#
        return $num
    }
    
    test $1 $2
    echo "sum value is " $?
    
    
    # 输出结果
    # 脚本名称 ./func.sh
    # 函数名称 test
    # 除了./func.sh外的所有位置参数 1 3
    # 除了./func.sh外的所有位置参数 1 3
    # 不包括./func.sh在内的位置参数的个数 2
    # sum value is  0
    

    6、函数处理参数

    特殊字符用来处理参数

    变量 描述
    $# 返回参数个数
    $* 返回所有参数
    ? 脚本运行的当前进程 ID 号
    $! 后台运行的最后一个进程的 ID 号
    $@ 返回所有参数
    $- 返回 Shell 使用的当前选项,与 set 命令功能相同。
    $? 函数返回值

    示例

    #!/usr/bin/env bash
    
    test(){
        echo "脚本运行的当前进程 ID 号:" ?
        echo "后台运行的最后一个进程的 ID 号:" $!
        echo "Shell 使用的当前选项:$-"
    }
    
    test
    
    # 输出结果
    # 脚本运行的当前进程 ID 号: 7
    # 后台运行的最后一个进程的 ID 号:
    # Shell 使用的当前选项:hB
    

    相关文章

      网友评论

          本文标题:【Shell】函数

          本文链接:https://www.haomeiwen.com/subject/jknujdtx.html