參考: 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
|
