linux Shell函數
Shell函數類似於Shell腳本,裏面存放了一系列的指令,不過Shell的函數存在於內存,而不是硬盤文件,所以速度很快,另外,Shell還能對函數進行預處理,所以函數的啟動比腳本更快。
1、函數定義
1 2 3 4 |
function 函數名() {
語句
[ return ]
}
|
關鍵字function表示定義一個函數,可以省略,其後是函數名,有時函數名後可以跟一個括號,符號“{”表示函數執行命令的入口,該符號也可以在函數名那一行,“}”表示函數體的結束,兩個大括號之間是函數體。
語句部分可以是任意的Shell命令,也可以調用其他的函數。
如果在函數中使用exit命令,可以退出整個腳本,通常情況,函數結束之後會返回調用函數的部分繼續執行。
可以使用break語句來中斷函數的執行。
declare –f 可以顯示定義的函數清單
declare –F 可以只顯示定義的函數名
unset –f 可以從Shell內存中刪除函數
export –f 將函數輸出給Shell
另外,函數的定義可以放到 .bash_profile 文件中,也可以放到使用函數的腳本中,還可以直接放到命令行中,還可以使用內部的unset命令刪除函數。一旦用戶註銷,Shell將不再保持這些函數。
2、函數的調用
函數調用的實例:
1 2 3 4 5 6 7 8 |
#!/bin/bash
function show() {
echo "hello , you are calling the function" }
echo "first time call the function"
show
echo "second time call the function"
show
|
3、函數參數的傳遞
函數可以通過位置變量傳遞參數。例如
函數名 參數1 參數2 參數3 參數4
當函數執行時,$1 對應 參數1,其他依次類推。
實例:
1 2 3 4 5 6 7 8 |
#!/bin/bash
function show() {
echo "hello , you are calling the function $1"
}
echo "first time call the function" show first
echo "second time call the function"
show second
|
4、函數的返回值
函數中的關鍵字“return”可以放到函數體的任意位置,通常用於返回某些值,Shell在執行到return之後,就停止往下執行,返回到主程序的調用行,return的返回值只能是0~256之間的一個整數,返回值將保存到變量“$?”中。
實例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
#!/bin/bash
function abc() {
RESULT=` expr $1 \% 2` #表示取余數
if [ $RESULT – ne 0 ] ; then
return 0
else
return 1
fi
}
echo "Please enter a number who can devide by 2"
read N
abc $N
case $? in
0)
echo " yes ,it is”
;;
1)
echo “no ,it isn’t”
;;
esac
|
在這裏要註意參數傳遞了,上面read進來的數字,必須加上$符號才能傳遞給函數,我剛開始不知道是哪裏錯了,找了半天才知道是這裏出錯了。
5、函數的載入
如果函數在另外一個文件中,我們該怎麽調用它呢?
這裏就有一個方法。比如 show 函數寫在了function.sh裏面了,我們就可以用 source 命令
1 2 |
source function .sh
show
|
這樣就可以調用了。
6、函數的刪除
用法:unset –f 函數名
7、函數的變量作用域
默認情況下,變量具有全局作用域,如果想把它設置為局部作用域,可以在其前加入local
例如:
1 |
local a= "hello"
|
使用局部變量,使得函數在執行完畢後,自動釋放變量所占用的內存空間,從而減少系統資源的消耗,在運行大型的程序時,定義和使用局部變量尤為重要。
8、函數的嵌套
函數可以進行嵌套,實例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
#!/bin/bash
function first() {
function second() {
function third() {
echo "------this is third"
}
echo "this is the second"
third
}
echo "this is the first"
second
}
echo "start..."
first
|
linux Shell函數