侧边栏壁纸
博主头像
落叶人生博主等级

走进秋风,寻找秋天的落叶

  • 累计撰写 130562 篇文章
  • 累计创建 28 个标签
  • 累计收到 9 条评论
标签搜索

目 录CONTENT

文章目录

第6章创建函数-----------(函数递归、 创建库、source命令)

2023-11-22 星期三 / 0 评论 / 0 点赞 / 57 阅读 / 4312 字

6.5 函数递归与创建库 6.5.1函数递归 自给(self-containment)是局部函数变量的一个特性。自给函数除了脚本通过命令行传递的变量,不使用函数之外的任何资源。 递归调用函数是指函

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:" numberresult=`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库文件,只需添加下列命令行:.  ./ Demo80source ./Demo80。该实例假定Demo80库文件和shell脚本在同一目录。如果二者不在同一目录,那么应当使用恰当的路径来访问库文件。

         操作实例如下:         

#!/bin/bash#使用另一个shell脚本中定义的函数#使用函数库的关键是source命令#使用点操作符号(source)#source ./Demo80. ./Demo80value1=10value2=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库文件中定义的函数。

广告 广告

评论区