zoukankan      html  css  js  c++  java
  • Shell 函数相关

    一、函数的两种定义方式

      第一种:函数名(){ ...... }

      第二种:function 函数名{ ...... }

      调用时直接使用 函数名 调用,将函数当作一个“命令”即可。函数内部直接使用 $1、$2 ... $n

    二、函数返回值有两种形式

    • return
    • echo

    1、使用 return 返回值

    • 利用 return 返回函数的返回值,取值范围为 1~255 的整数
    • 函数使用 return 返回值,通过只是用来供其他地方调用获取状态,因此一般情况只会返回 0 或 1。0表示成功,1表示失败

      例如:判断 nginx 进程是否启动:

    #!/bin/bash
    # 判断nginx是否启动
    
    function is_run_nginx
    {
            status=$$
            ps -ef | grep ngnix | grep -v grep | grep -v $status &> /dev/null
            if [ $? -eq 0 ]; then
                    # 默认为0
                    return
            else
                    return 1
            fi
    }
    # return返回值不能 赋值给某个变量,只能用作后续程序进行判断
    # is_run=`is_run_nginx` is_run_nginx
    && echo "nginx is running" || echo "nginx is stop"

     2、使用 echo 返回值

    • 使用 echo 可以返回任何字符串结果
    • 通常用来返回数据,比如一个字符串值 或 列表值

      举例:获取系统用户名

    #!/bin/bash
    
    #使用echo 返回值,返回系统用户名
    
    function get_users
    {
            # -d 指定分隔符,-f 指定取第几列
            echo `cat /etc/passwd | cut -d : -f 1`
    }
    
    user_list=`get_users`
    
    index=1
    for u in $user_list
    do
            echo "This is $index user: $u"
    done

    三、Shell 全局变量与局部变量

    1、全局变量

    • 不做特殊声明的话,默认都是全局变量
    • Tips:大型脚本慎用全局变量

    2、局部变量(只能声明在函数内)

    • 定义变量时,使用 local 关键字
    • 函数内外同时存在同名变量,函数内变量覆盖函数外变量

    注意:如果函数没有调用,函数里面的变量是不会生效的。

    #!/bin.bash
    
    var1="hello var1"
    
    function test
    {
            var2="hello var2"
            local var3="hello var3"
    }
    
    # test 没调用,var2,var3都不存在
    echo $var1
    echo $var2
    echo $var3
    
    test
    
    echo $var1
    echo $var2
    # var3 为局部变量,不能打印
    echo $var3

    打印结果:

    hello var1
               // test函数没调用,var2 不存在
           // test函数没调用,var2 不存在
    hello var1 hello var2
    // var3 是局部变量,echo 一个空值

    四、建立函数库

     函数库存在的目的就是 将重复代码封装成函数文件。一般函数库不直接执行,而是供脚本进行调用

    关于函数库的一些经验:

    • 库文件名的后缀是任意的,一般建议使用 .lib
    • 库文件一般没有可执行选项
    • 库文件无需和脚本在同一级目录,只需在脚本中引用时指定
    • 第一行一般使用 #!/bin/echo , 输出警告信息,避免用户执行。

    举个例子:

      定义一个函数库,该函数库实现一下几个函数:1、加法函数 add;2、减法函数 reduce;3、乘法函数 multiple;4、除法函数 devide;打印系统运行情况的函数 sys_load,该函数可以显示内存运行情况。

      函数库如下:

    function add
    {
            echo "`expr $1 + $2`"
    }
    
    function reduce
    {
            echo "`expr $1 - $2`"
    }
    
    function multiple
    {
            echo "`expr $1 * $2`"
    }
    
    function divide
    {
            echo "`expr $1 / $2`"
    }
    
    function sys_load
    {
            echo "Memory Info"
            echo
            free -m
            echo
    
            echo "Disk Usage"
            echo
            df -h
            echo
    } 

      引用函数库中的函数,当前 脚本 和 lib 在同一级目录。 

    #!/bin/bash
    
    # 引用函数库 lib/base_function
    # 通过点 ". " 引入函数库 . lib
    /base_function.lib add 10 10 reduce 20 10 multiple 30 10 divide 40 10 sys_load

     

     
  • 相关阅读:
    How to interpret complex C/C++ declarations (ZT)
    The Managed Thread Pool
    How slow is dynamic_cast?
    Type Safety
    sBRDF空间双向反射分布函数完全解析
    近日工作与生活梗概
    简单的环绕散射 Simple Wrap Diffuse From GPU GEMS1
    屈辱史
    难以忽视的细节
    物理学与计算机图形学中的HDR
  • 原文地址:https://www.cnblogs.com/shenqidu/p/10603259.html
Copyright © 2011-2022 走看看