自學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

相關文章
相關標籤/搜索