先來看一個簡單的求和函數
#!/bin/bash
#a test about function
f_sum 7 8
function f_sum(){
return $(($1+$2));
}
f_sum 3 5;
total=$(f_sum 3 6);
echo $total,$?;
注意幾個問題:
1.shell是逐行執行,所以要在函數聲明之後才可調用,否則會有錯誤
2.我們要獲得函數的返回值只能通過$?
來獲得,不可以通過變量拿到返回值。
再看看關於變量作用域的測試:
#!/bin/bash
#a test about function
echo $(uname)
num=100
uname(){
echo "my name is lenve"
((num++))
return 250
}
changeVar(){
local num=20
((num++))
echo $num
}
uname;
echo $?
echo $num;
changeVar;
echo $num;
輸出:
要點:
1.第一個輸出Linux是第一行代碼執行的結果,這是調用了系統函數
2.調用uname,系統會優先調用這個腳本中的函數,找到了直接調用,找不到再找系統函數。於是輸出my name is lenve
3.250是uname函數的返回值
4.101是由於num在uname函數中自增1導致的
5.21表示如果函數中定義了與函數外部同名的變量,函數內部使用的是內部定義的變量而不是全局變量
6.101進一步佐證了第5點
Linux Shell在while中用read從鍵盤輸入 http://www.linuxidc.com/Linux/2015-06/118831.htm
Linux Shell 程序調試 http://www.linuxidc.com/Linux/2015-07/119880.htm
Linux Shell腳本面試25問 http://www.linuxidc.com/Linux/2015-04/116474.htm
Linux/Unix Shell 參數傳遞到SQL腳本 http://www.linuxidc.com/Linux/2013-03/80568.htm
Shell腳本中參數傳遞方法介紹 http://www.linuxidc.com/Linux/2012-08/69155.htm
Shell腳本傳遞命令行參數 http://www.linuxidc.com/Linux/2012-01/52192.htm
Linux Shell 通配符、轉義字符、元字符、特殊字符 http://www.linuxidc.com/Linux/2014-10/108111.htm