1. 程式人生 > >shell中的函數

shell中的函數

shell 函數

什麽是函數?

1)函數基礎概念

函數:function ,指把一段獨立功能的代碼當作一個整體並為之取一個名字,即命名的代碼段,也即函數;

函數是過程式編程中實現代碼重用的重要組件,也即實現模塊化編程和結構化編程的重要組件;

函數代碼段在定義時不會自動執行,在調用時才會自動執行;調用函數,即在代碼中給定函數名,在代碼執行時會在函數名出現的位置執行該函數名代表的函數代碼段;

函數命名與變量命名法則類似,盡量不要與系統命令同名;

函數的生命周期:被調用時創建,返回時(即函數執行完了時)終止;

函數狀態返回值為函數體中運行的最後一條命令的狀態返回值,

與腳本一樣這樣的狀態返回值並不理想,因此有時需要自定義函數狀態返回值;自定義函數狀態返回值使用return命令,函數體中任何位置出現return函數終止:

return [0-255]

0: 成功

1-255: 失敗

2)函數的定義

格式一:

function f_name {

...函數體...

格式二:

f_name() {

...函數體...

}

3)函數返回值

①函數的執行結果返回值

1>

使用echo或printf命令輸出;

printf不會換行輸出但是可以格式化輸出;

2>函數體中調用的命令的執行結果;

②函數的執行狀態返回值(即退出狀態碼)

1>默認取決於函數體中執行的最後一條命令的退出狀態碼;

2>自定義:使用return命令;


4)函數參數

在函數體中可以使用$1,$2, ...引用傳遞給函數的參數;還可以在函數中使用$*或[email protected]引用傳遞給函數的所有參數,使用$#引用傳遞給函數的參數個數;

在調用函數時,在函數名後面以空白符分隔給定參數列表即可,例如,

testfunc arg1 arg2 arg3 ...

5)變量作用域:

局部變量:作用域是函數的生命周期;

定義局部變量的方法:local VARIABLE=VALUE

本地變量:作用域是當前shell腳本的生命周期;

6)函數遞歸:函數直接或間接調用自身;

①階乘:n!=n*(n-1)!=n*(n-1)*(n-2)!=...

#/bin/bash
#
fact () {
if [ $1 -eq 1 -o $1 -eq 0 ];then
    echo 1
else 
    echo "$[$1*$(fact $[$1-1])]"
fi
}
fact $1

斐波那契數列:這個數列從第2項開始,每一項都等於前兩項之和,特別指出第0項是0,第1項是1;例如,0,1,1,2,3,5,8,13,21,...

#!/bin/bash
#
fab() {
        if [ $1 -eq 0 -o $1 -eq 1 ];then
                echo -n "1 "
        else
                echo -n "$[$(fab $[$1-2])+$(fab $[$1-1])] "
        fi
}
for i in $(seq $1);do                                                                                                                                  
        fab $i
done
echo
~






本文出自 “linux運維” 博客,請務必保留此出處http://arm2012.blog.51cto.com/2418467/1961195

shell中的函數