自学Linux Shell16.3-函数递归+建立库

点击返回 自学Linux命令行与Shell脚本之路html

16.3-函数递归+建立库

1. 函数递归

  • 递归调用函数是指函数调用自身进行求解。
  • 一般,递归函数有基值,函数最终递推到达该值。
  • 许多高级数学算法使用递归将复杂等式的递归层次反复下降,直到到达基值指定的层次。
  • 递归算法的一个经典示例是计算阶乘。一个数的阶乘是这个数乘以它前面的全部数的积。       

好比计算5的阶乘:  5!=1*2*3*4*5=120
使用递归的话,能够简化成:x!=x*(x-1)!    也就是x的阶乘等于x乘以x-1的阶乘算法

 1 #!/bin/bash
 2 function factorial {
 3    if [ $1 -eq 1 ]
 4    then
 5      echo 1
 6    else
 7      local temp=$[ $1 - 1 ]
 8      local result=$(factorial $temp)
 9      echo $[ $result*$1 ]
10    fi
11 }

2. 建立库

  • 若是每一个脚本都对相同的函数作出定义,且各个脚本对该函数只调用一次,那么上述函数和调用的作法看似没有减小重复代码。
  • bashshell能够建立函数的库文件,而后能够在不一样脚本中引用改库文件。
  • 首先要建立公共库文件,包含多个脚本须要调用的函数。而后在用到这些函数的脚本文件中包含这个公共库文件。

问题:shell

在于shell函数的做用域。与环境变量同样,shell函数仅在其定义所处的shell会话中有效。若是从shell命令行界面运行myfuncs脚本,那么shell将打开一个新shell,并在该新shell中运行此脚本。这将为新shell定义了3个函数,可是试图运行调用这些库函数的另外一脚本时,库函数并不能使用。bash

解决办法:函数

使用函数库的关键是source命令。source命令在当前shell环境中执行命令,而非建立新shell来执行命令。spa

  • 使用source命令在shell脚本内部运行库文件脚本。这样脚本可使用这些函数
  • source有一个短小的别名,称为点操做符 
  • 为了在shell脚本中调用myfuncs库文件,只需添加下列命令行:    ../ myfuncs   或    source ./myfuncs 
  • 库文件和shell脚本建议在同一目录。若是不在同一目录,那么应当使用恰当的路径来访问库文件 
 1 #!/bin/bash
 2 function addem {
 3    echo $[ $1 + $2 ]
 4 }
 5 function multem {
 6    echo $[ $1 * $2 ]
 7 }
 8 function divem {
 9     if [ $2 -ne 0 ]
10     then
11     echo $[ $1 / $2 ]
12     else
13     echo -1
14     fi
15 }       # 定义了一个公共库, 里面有3个函数,addem函数两个数相加;multem函数两个数相乘;divem函数两个数相除

 

3. 开源函数库shtool软件包介绍

 3.1 下载和安装shtool软件包

下载地址:ftp://ftp.gnu.org/gnu/shtool/    最新为2008年的  shtool-2.0.8.tar.gz

命令行

 

 

 

 

 

 

 

...3d

相关文章
相关标签/搜索