美文网首页Shell 脚本成长笔记
Shell 函数(三) 函数的调用

Shell 函数(三) 函数的调用

作者: 赵者也 | 来源:发表于2017-04-15 21:13 被阅读23次

    函数的调用方式有多种,可以直接在 Shell 命令行调用函数,或是在脚本内部调用函数,或是从其他函数文件中调用函数,还可以递归地调用函数。

    在脚本中调用函数

    在脚本中调用函数的实例:

    #! /bin/bash
    
    function yesterday() {
        date --date='1 day ago'
    }
    
    yesterday
    

    上面脚本的运行效果:


    2017041505

    从函数文件中调用函数

    1.我们可以把所有的函数存储在一个函数文件中;
    2.我们可以把所有的函数加载到当前脚本或是命令行。

    加载函数文件中的所有函数的语法如下:

    /path/to/functions.sh
    

    现在有如下脚本 functionsTest.sh :

    #! /bin/bash
    
    declare -r TRUE=0
    declare -r FALSE=1
    declare -r PASSWD_FILE=/etc/passwd
    
    function to_lower() {
        local str="$@"
        local output
        output=$(tr '[A-Z]' '[a-z]'<<<"${str}")
        echo $output
    }
    
    function is_root() {
        [ $(id -u) -eq 0 ] && return $TRUE || return $FALSE
    }
    
    function is_user_exits() {
        local u="$1"
        grep -q "^${U}" $PASSWD_FILE && return $TRUE || return $FALSE
    }
    

    从函数文件中调用上述脚本的测试脚本如下:

    #! /bin/bash
    
    . /home/toby/functionsTest.sh
    
    var1="The DHJAGD sdja aidWyMDAHDGAswdGDAHWk ashjdaksSd WYGY."
    
    is_root && echo "You are logged in as root." || echo "You are not logged in as root."
    
    is_user_exits "toby" && echo "Account found." || echo "Account not found."
    
    echo -e "*** Orignal quote: \n${var1}"
    
    echo -e "*** Lowercase version: \n$(to_lower ${var1})"
    

    上述脚本的运行结果:

    2017041506

    递归函数调用

    递归函数是重复调用其自身的函数,并且没有递归调用次数的限制。

    下面是一个计算给定命令行参数的阶乘的实例:

    #! /bin/bash
    
    function factorial() {
        local i=$1
        local f
        declare -i i
        declare -i f
    
        [ $i -le 2 ] && echo $i || { f=$(( i - 1 )); f=$(factorial $f); f=$(( f * i )); echo $f; }
    }
    
    [ $# -eq 0 ] && { echo "Usage: $0 number"; exit 1; }
    
    factorial $1
    

    运行效果如下:

    2017041507

    本文参考自 《Linux Shell命令行及脚本编程实例详解

    相关文章

      网友评论

        本文标题:Shell 函数(三) 函数的调用

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