创建函数-----------(函数递归 创建库source命令)

丈夫欲遂平生志,一载寒窗一举汤。这篇文章主要讲述创建函数-----------(函数递归 创建库source命令)相关的知识,希望能为你提供帮助。
6.5 函数递归与创建库6.5.1函数递归
                自给(self-containment)是局部函数变量的一个特性。自给函数除了脚本通过命令行传递的变量,不使用函数之外的任何资源。
                递归调用函数是指函数调用自身进行求解。通常,递归函数有基值,函数最终递推到达该值。许多高级数学算法使用递归将复杂等式的递归层次反复降低,直到到达基值指定的层次。递归算法的一个经典示例是计算阶乘。一个数的阶乘是这个数乘以它前面的所有数的积。        

#!/bin/bash
#递归函数使用

#求一个正数的阶乘
function factorial
if [ $1 -le 1 ]
then
echo 1
else
local temp=$[ $1 - 1 ]
local result=`factorial $temp`
echo $[ $result * $1 ]
fi


#从键盘输入一个数字
read -p "Enter the factorial number:" number
result=`factorial $number`
echo "The factorial of $number is:$result"


6.5.2 创建库
                如果每个脚本都对相同的函数做出定义,且各个脚本对该函数只调用一次,那么上述函数和调用的做法看似没有减少重复代码。
                bashshell可以创建函数的库文件,然后可以在不同脚本中引用改库文件。这种方法首先要创建公共库文件,包含多个脚本需要调用的函数。
                一个简单库文件称为Demo80,定义了三个简单函数,如下所示:      


#!/bin/bash
#脚本函数
#求和
function addem
echo $[ $1 + $2 ]


#乘积
function multem
echo $[ $1 * $2 ]


#除法
function divem
if [ $2 -ne 0 ]
then
echo $[ $1 / $2 ]
else
echo -1
fi

                下一步是将库文件Demo80包含进需要调用库函数的脚本文件。其难点在于shell函数的作用域。与环境变量一样,shell函数仅在其定义所处的shell会话中有效。如果从shell命令行界面运行Demo80脚本,那么shell将打开一个新shell,并在该新shell中运行此脚本。这将为新shell定义了3个函数,但是试图运行调用这些库函数的另一脚本时,库函数并不能使用。
                使用函数库的关键是source命令。source命令在当前shell环境中执行命令,而非创建新shell来执行命令。使用source命令在shell脚本内部运行库文件脚本。这样脚本可以使用这些函数。
                source有一个短小的别名,称为点操作符。为了在shell脚本中调用Demo80库文件,只需添加下列命令行:.   ./ Demo80或 source ./Demo80。该实例假定Demo80库文件和shell脚本在同一目录。如果二者不在同一目录,那么应当使用恰当的路径来访问库文件。
                操作实例如下:          
#!/bin/bash
#使用另一个shell脚本中定义的函数
#使用函数库的关键是source命令
#使用点操作符号(source)
#source ./Demo80
. ./Demo80

value1=10
value2=5
#调用myfuncs脚本中的函数
addResult=`addem $value1 $value2`
mulResult=`multem $value1 $value2`
divResult=`divem $value1 $value2`

#输出计算结果
echo "The result of add:$addResult"
echo "The result of mult:$mulResult"
echo "The result of div:$divResult"




                脚本能成功调用在Demo80库文件中定义的函数。
【创建函数-----------(函数递归 创建库source命令)】


    推荐阅读