參考: http://www.cnblogs.com/zhaiqianfeng/p/4621297.html
“sum=$(fsum 2 5)”這種方式,是將標准輸出(echo 出來的東子)傳遞給主程序的變量,而不是返回值!
#!/bin/bash function sum(){ val1=$1 val2=$2 val3=$(($1+$2)) echo $val3 } #Call function with 2 parameters and it return 1 parameter. ret_val=$(sum 10 20) echo $ret_val
腳本執行結果: ret_val = $(sum 10 20) 將sum 10 20 的輸出傳遞給變量ret_val
#!/bin/bash prod=1 twoPow(){ for((i=0;i<$1;i++)); do prod=$(($prod*2)) done } echo "Enter a number" read num twoPow $num echo $prod
執行腳本 c.sh
#!/bin/bash twoPow() { prod=1 for((i=0;i<$1;i++)); do prod=$(($prod*2)) done return $prod } echo "Enter a number" read num twoPow num
----------------------------------------------------------------------------------------------------------------------------------
Shell的函數在使用之前必須先定義,定義格式:
1
2
3
4
5
|
[ function ] funname [()]
{
action;
[
return
int
;]
}
|
- 可以帶function fun()定義,也可以直接fun() 定義,不帶任何參數。
- 參數返回,可以顯示加:return 返回,如果不加,將以最后一條命令運行結果,作為返回值。 return后跟數值n(0-255)
示例
1
2
3
4
5
6
7
8
9
10
|
fsum
2
5
fsum(){
echo $
1
,$
2
return
$
1
+$
2
}
sum=$(fsum
2
5
)
echo $?
echo
"sum=$sum"
|
執行輸出:
fsum: not found
7
sum=2,5
從上面這個例子我們可以得到幾點結論:
- 必須在調用函數地方之前,聲明函數,shell腳本是逐行運行,這點和編譯型語言不通。
- 函數返回值,只能通過$? 系統變量獲得,而“sum=$(fsum 2 5)”這種方式,是將標准輸出傳遞給主程序的變量,而不是返回值!
Shell函數可以在腳本文件中使用之前定義它,也可以把函數定義在一個獨立的文件使用點號(.)命令來引用它。如function.sh和testshell.sh在同一目錄中,function.sh
1
2
3
4
|
fsum(){
echo $
1
,$
2
return
$(($
1
+$
2
))
}
|
testshell.sh
1
2
3
|
#! /bin/sh
. ./function.sh
fsum
2
5
|