• Linux之shell编程函数使用


    linux shell 可以用户定义函数,然后在shell脚本中可以随便调用。下面说说它的定义方法,以及调用需要注意那些事项。

    原文和作者一起讨论:http://www.cnblogs.com/intsmaze/p/6675421.html

    微信:intsmaze

    函数定义

    #!/bin/sh
    # func1.sh
    hello()    ## 函数定义
    {
            echo "Hello there today's date is `date +%Y-%m-%d`"
            # return  2      ###返回值其实是状态码,只能在[0-255]范围内
    }   
    hello #函数调用
    echo $?  #获取函数的return值,就是获取上一个命令的状态码,如果return 2没有注释,就是获取return 2 命令的状态吗。  
    echo "now going to the function hello intsmaze"

    调用脚本

    [hadoop@centos-Reall-131 shtest]$ sh func1.sh 
    Hello there today's date is 2017-04-06
    0
    now going to the function hello intsmaze

    注意:

    1.必须在调用函数之前,先声明函数,shell脚本是逐行运行。不会像其它语言一样先预编译。

    2.函数返回值,只能通过$? 系统变量获得,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255)

    函数参数

    #!/bin/bash
    # fun1.sh
    funWithParam(){
        echo "第一个参数为 $1 !"
        echo "第二个参数为 $2 !"
        echo "第十个参数为 $10 !"
        echo "第十个参数为 ${10} !"
        echo "第十一个参数为 ${11} !"
       echo "参数总数有 $# 个!"
       echo "作为一个字符串输出所有参数 $* !"
    }
    funWithParam 1 2 3 4 5 6 7 8 9 34 73

    注意,$10 不能获取第十个参数,获取第十个参数需要${10}。当n>=10时,需要使用${n}来获取参数。

    [hadoop@centos-Reall-131 shtest]$ sh fun1.sh 
    第一个参数为 1 !
    第二个参数为 2 !
    第十个参数为 10 !
    第十个参数为 34 !
    第十一个参数为 73 !
    参数总数有 11 个!
    作为一个字符串输出所有参数 1 2 3 4 5 6 7 8 9 34 73 !

    函数返回值

    #!/bin/bash
    # fun2.sh
    funWithReturn(){
        echo "这个函数会对输入的两个数字进行相加运算..."
        echo "输入第一个数字: "
        read aNum
        echo "输入第二个数字: "
        read anotherNum
        echo "两个数字分别为 $aNum 和 $anotherNum !"
        return $(($aNum+$anotherNum))
    }
    funWithReturn
    echo "输入的两个数字之和为 $? !"#这里上一个命令是 return $(($aNum+$anotherNum))

    调用脚本

    [hadoop@centos-Reall-131 shtest]$ sh fun2.sh 
    这个函数会对输入的两个数字进行相加运算...
    输入第一个数字: 
    100
    输入第二个数字: 
    200
    两个数字分别为 100 和 200 !
    输入的两个数字之和为 44 !#这里上一个命令是 return 300

    跨脚本调用函数

    假如上述的脚本文件fun1.sh保存在此路径:/root/fun1.sh

    则可在脚本fun_other.sh中调用脚本fun1.sh中的函数

    #!/bin/bash
    # fun_other.sh
    .  /root/fun1.sh    # 注:  . 和 / 之间有空格
    # 或者 source /root/fun1.sh
    funWithParam 11 22 33 44 55 66 77 88 99 100 101

    调用脚本

    [hadoop@centos-Reall-131 shtest]$ sh fun_other.sh
    第一个参数为 1 !
    第二个参数为 2 !
    第十个参数为 10 !
    第十个参数为 34 !
    第十一个参数为 73 !
    参数总数有 11 个!
    作为一个字符串输出所有参数 1 2 3 4 5 6 7 8 9 34 73 !
    第一个参数为 11 !
    第二个参数为 22 !
    第十个参数为 110 !
    第十个参数为 100 !
    第十一个参数为 101 !
    参数总数有 11 个!
    作为一个字符串输出所有参数 11 22 33 44 55 66 77 88 99 100 101 !
  • 相关阅读:
    NexusFile(文件管理器)
    塔式、机架式、刀片式服务器的区别和特点
    使用dsoframer控件出现"Unable to display the inactive document. Click here to reactivate the document."的问题 .
    类型“Microsoft.Office.Interop.Word.ApplicationClass”错误 4317 无法嵌入互操作类型
    解决C#导出excel异常来自 HRESULT:0x800A03EC的方法 .
    c# winfrom 皮肤切换 控件 IrisSkin2.dll 使用
    巧用花生壳将局域网内的FTP和www服务器发布到互联网
    Windows Server 2003 动态网站IIS设置(图)
    NAT原理简介、各种 ADSL Modem 及路由器的端口映射方法
    UML用例图
  • 原文地址:https://www.cnblogs.com/intsmaze/p/6675421.html
Copyright © 2020-2023  润新知