Shell 函数(三) 函数的调用

函数的调用方式有多种,可以直接在 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})"

上述脚本的运行结果:

Shell 函数(三) 函数的调用_第1张图片
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

运行效果如下:

Shell 函数(三) 函数的调用_第2张图片
2017041507

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

你可能感兴趣的:(Shell 函数(三) 函数的调用)