zoukankan      html  css  js  c++  java
  • (十一)shell函数详解(返回值,参数,定义,调用)

    函数定义 与 调用

    #函数定义
    #标准
    function fun1() {
            echo "one"
    }
    
    #省略括号
    function fun2 {
            echo "two"
    }
    
    #省略关键字
    fun3() {
            echo "$@"
    }
    
    #函数调用
    #无参数
    fun1
    fun2
    
    #有参数
    fun3 10 30 70
    

      

    函数返回值

     shell函数返回值表示的是退出状态, 0表示成功, 非0表示失败

    那既然不能返回正常的值,改如何get到返回值呢?

    • 将得到的结果赋值给全局变量(除了local定义以外的变量都是全局的,即便在函数内部)
    • 在函数内部将结果输出,在函数外部使用$()  或 ··捕获
    #获取全局
    function fun1()
    {
            num=99
    }
    fun1
    echo $num
    #获取局部
    function fun2()
    {
            local num=88
            echo "局部:$num"
    }
    fun2
    echo $num #只能获得全局 不能同fun1一样用此方法
    
    ret=$(fun2) #调用子函数
    echo $ret #输出
    #$? 表示函数的退出状态
    function fun3()
    {
            a=90
            return $a
    }
    fun3
    echo $?

    #全局变量
    read num function fun4() {
    for((i=$1; i<$2; i++));do ((num+=i)) #改变全局变量的值 done echo "显示fun4内部:$num, $?" #结果为0 return $? #$返回上一条命令的退出状态 } fun4 10 20 #调用 echo "num结果为: $num" #结束 157

    #局部变量 read a function fun5() { local a
    =22 for((i=$1; i<$2; i++)); do ((a+=i)) done echo "显示fun5内部: $a, $?" return $? } ret=$(fun5 1 2) echo "ret结果为: $ret"

    结果:

    10
    显示fun4内部:155, 0
    num结果为: 155
    20
    ret结果为: 显示fun5内部: 23, 0

     

    函数参数

    •  定义函数时不能调用参数,如 fun1(x, y) 错误;
    •  调用函数时可以调用参数,如 fun1 10 20 正确;
    •  函数内部$n可以来接受参数,$1 $2 $3表示第n个参数;
    •  $#:参数个数
    •  $@ 和 $* :一次性获取所有的参数
    function show()
    {
            echo "第一个参数: $1"
            echo "参数个数: $#"
            n=$2
            for i in $@
            do
                    ((n+=10))
                    echo "第i个参数:$i"
            done
            echo $n
    }
    
    show 10 20 30

    结果:

    第一个参数: 10
    参数个数: 3
    第i个参数:10
    第i个参数:20
    第i个参数:30
    50

    做一个优秀的程序媛
  • 相关阅读:
    回文字符串系列问题
    找两个数组的重合数字系列
    IPC最快的方式----共享内存(shared memory)
    【经典算法】——KMP,深入讲解next数组的求解
    关于SqlDateTime溢出的问题
    git操作之常见问题解决方案
    Javascript中length属性的总结
    从零开始学node(一): nodejs开发环境的配置
    使用Number.parseFloat引发的悲剧
    超链接的那些事(三): 属性target
  • 原文地址:https://www.cnblogs.com/oytt/p/13495400.html
Copyright © 2011-2022 走看看