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

Posted WEL测试

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了创建函数-----------(函数递归 创建库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章创建函数-----------(函数递归、

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库文件,只需添加下列命令行:.  ./ Demo80source ./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"

第6章创建函数-----------(函数递归、


         脚本能成功调用在Demo80库文件中定义的函数。


以上是关于创建函数-----------(函数递归 创建库source命令)的主要内容,如果未能解决你的问题,请参考以下文章

多个脚本杂乱怎么办?用库啊,全都进来

shell的函数

递归创建决策树

Shell脚本------函数

shell函数及库的创建

CreateDirectory递归创建多级目录