寫在前面:案例、常用、歸類、解釋說明。(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 {
> echo [[1 * $2 ]
> }
[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,如需轉載請自行聯系原作者