天天看點

Linux&shell之進階Shell腳本程式設計-建立函數

寫在前面:案例、常用、歸類、解釋說明。(By Jim)

使用函數

<a></a>

(記得空格,函數一定要在使用之前定義,函數名必須唯一)

傳回值

可以通過$?來确定函數的退出狀态

使用return指令

結果:

Enter a value:23

double the value

The new vlue is 46

(退出狀态的取值範圍是0到255,$?是最近已執行指令的退出狀态)

使用函數輸出,這種方法最靠譜了

看例子

(這樣就能很好的利用輸出結果了)

在函數中使用變量

向函數傳遞參數

Adding 10 and 15:25

Just one number 10:20

No numbers:-1

(由上述可知,#可以得到參數的個數,#可以得到參數的個數,1表示第一個參數,$2表示第二個參數)

(函數外面的#表示調用腳本使用的參數數,函數裡的#表示調用腳本使用的參數數,函數裡的#表示調用函數使用的參數數,注意這點差別)

作用域是變量的可見區域。

全局變量,在shell腳本内處處有效的變量。函數中定義全局變量,那麼主代碼中有效。主代碼中定義全局,函數中也有效。

預設情況下,腳本中定義的變量都是全局變量。

看例子:

(輸入45,得到90,這裡的value在函數中發生變化了,到腳本中一樣可以使用,而且已經變化了)

局部變量

作用範圍隻在函數當中

關鍵字local

(輸入45,輸出45。因為加上local關鍵字之後,函數中的value是局部變量,與外界無關)

(不過可以通過輸出來擷取函數處理的結果,這裡的result還是處理後的結果,比如輸入45,處理後是90)

數組變量與函數

The original array is :1 2 3 4 5

The result is 15

(數組參數傳入函數,函數擷取後,進行處理輸出。腳本将輸出結果列印)

(輸出數組)

函數遞歸

(輸入5,輸出120。大環套小環,小環套更小,逐漸執行。

我們一步一步剖析

5輸入得到5*4!

4又得到4*3!

3又得到3*2!

2又得到2*1

由此得到5*4*3*2*1也就是120

顯然單個腳本有助于減少輸入量,但是如果多個腳本碰巧使用同樣的函數又該怎樣?

建立庫

使用函數庫的關鍵詞是source

(通過source就能使用庫函數了)

#!/bin/bash

# testing the script

. ./myfuncs

result=`addem 10 15`

echo "The result is $result"

(或者點操作符,效果是一樣的)

在指令行中使用函數

[root@localhost shellscript]# function multem {

&gt; echo [[1 * $2 ]

&gt; }

[root@localhost shellscript]# multem 2 5

10

(多行指令)

在.bashrc檔案中定義函數

直接在指令行定義shell函數的缺點是一旦退出shell,函數定義将失效。

比較省事的方法是将函數定義在shell每次啟動都能重新載入的地方。.bashrc檔案就是這樣的地方。

可以用source(點操作符)将現有庫檔案的函數包含進.bashrc腳本。

重新啟動指令(source .bashrc)

# .bashrc

# Source global definitions

if [ -f /etc/bashrc ]; then

        . /etc/bashrc

fi

# User specific aliases and functions

function addem {

  echo [[1 + $2 ]

}

(重新開機之後,新加入的函數就有效了)

腳本中也可以使用了

本文轉自TBHacker部落格園部落格,原文連結:http://www.cnblogs.com/jiqing9006/p/3253232.html,如需轉載請自行聯系原作者