好比計算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 }
問題:shell
在於shell函數的做用域。與環境變量同樣,shell函數僅在其定義所處的shell會話中有效。若是從shell命令行界面運行myfuncs腳本,那麼shell將打開一個新shell,並在該新shell中運行此腳本。這將爲新shell定義了3個函數,可是試圖運行調用這些庫函數的另外一腳本時,庫函數並不能使用。bash
解決辦法:函數
使用函數庫的關鍵是source命令。source命令在當前shell環境中執行命令,而非建立新shell來執行命令。spa
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函數兩個數相除
下載地址:ftp://ftp.gnu.org/gnu/shtool/ 最新爲2008年的 shtool-2.0.8.tar.gz
命令行
...3d