詳解shell 函數(shù)定義與調用
一、Shell函數(shù)定義格式
shell函數(shù)定義格式,各部分說明如下:
[ function ]等中括號括起來部分----表示可選(即可有可無)
your_function_name部分----為函數(shù)名
your_shell_commands部分----為函數(shù)代碼;shell一般以行為單位,但可以使用“\”換行,也可以在單行內使用“;”作為分隔符
return int部分----shell函數(shù)可以有返回值,但只能返回整數(shù)不能返回字符串
[ function ] your_function_name() { your_shell_commands; [return int;] }
二、基本函數(shù)定義與調用
本節(jié)程序實現(xiàn)函數(shù)定義與調用,注意調用函數(shù)是不要使用括號(即如testFun()是不對的),代碼如下:
testFun{ echo "helloworld!" } testFun
運行如下:
三、傳遞參數(shù)調用
3.1 傳遞參數(shù)沒有空格
本節(jié)程序實現(xiàn)向被調用函數(shù)傳遞參數(shù),$0是運行該腳本的shell傳遞的參數(shù)從$1開始、傳遞多個參數(shù)是以空格分隔,代碼如下:
testFun(){ echo $1 } param="helloworld!" testFun $param
運行如下:
除了可以通過$n形式獲取第n個參數(shù)外,還可以使用以下幾個寫法:
形式 | 說明 |
---|---|
$# | 傳遞到腳本的參數(shù)個數(shù) |
$* | 以一個單字符串顯示所有向腳本傳遞的參數(shù) |
$$ | 腳本運行的當前進程ID號 |
$! | 后臺運行的最后一個進程的ID號 |
$@ | 與$*相同,但是使用時加引號,并在引號中返回每個參數(shù)。 |
$- | 顯示Shell使用的當前選項,與set命令功能相同。 |
$? | 顯示最后命令的退出狀態(tài)。0表示沒有錯誤,其他任何值表明有錯誤。 |
3.2 傳遞參數(shù)有空格
本節(jié)程序實現(xiàn)向被調用函數(shù)傳遞有空格的參數(shù),我們將上節(jié)“helloworld!”加個空格變?yōu)椤癶ello world!”如下:
testFun(){ echo $1 } param="hello world!" testFun $param
運行如下:
可以看到只有空格前的“hello”被打印了出來,空格后的“world!”并沒被打印出來(實際上空格后的"world!"被識別成了$2)
要傳遞有空格的參數(shù)也簡單,在傳遞時加上雙引號即可(單引號就不被認為是變量了所以不能用單引號),代碼如下:
testFun(){ echo $1 } param="hello world!" testFun "$param"
運行如下:
四、獲取返回值
4.1 返回整型
testFun(){ echo "helloworld!" return 99 } # 千萬要注意shell并不像其他語言直接返回返回值,其返回值放到$?中,這也是為什么只能返回整型的原因 # 所以這種承接方法是錯誤的,獲取到的值是echo打印的內容 # return_value=`testFun` # 以下才是正確獲取通過return返回的返回值的正確寫法 testFun echo "the return value is: $?"
4.2 返回字符串
我們在前面一直說shell函數(shù)只能返回整型不能返回字符串,我們試一下強行返回字符串,代碼如下:
testFun(){ echo "helloworld!" return "success" } testFun
運行如下,可以看到運行到return處報錯“-bash: return: success: numeric argument required”
所以要通過return返回字符串是沒戲的,我們有兩個變通的方法,第一種是通過$()獲取函數(shù)的所有打印,代碼如下:
testFun(){ echo "helloworld!" echo "success" } return_value=$(testFun) echo "$return_value"
運行如下:
可以看到成功獲取到了‘success“。但同時也可以看到這種做法獲取到的被調用函數(shù)的所有輸出,單要返回值到得單獨解析一下
另外的一種做法是直接用一個變量,shell的變量都是全局的在被調用函數(shù)中賦值的變量在調用函數(shù)處也可獲取,代碼如下:
testFun(){ echo "helloworld!" return_value="success" } testFun echo $return_value
運行如下:
參考:
http://edu.jb51.net/linux/linux-shell-passing-arguments.html
以上就是詳解shell 函數(shù)定義與調用的詳細內容,更多關于Shell 函數(shù)定義與調用的資料請關注腳本之家其它相關文章!
相關文章
并發(fā)數(shù)據(jù)庫壓力測試的shell腳本代碼
并發(fā)數(shù)據(jù)庫壓力測試的shell腳本,有需要的朋友可以參考下2013-02-02查看某時間段到現(xiàn)在的系統(tǒng)日志的sed命令
查看某時間段到現(xiàn)在的系統(tǒng)日志的sed命令,需要的朋友可以參考下2013-02-02shell命令實現(xiàn)當前目錄下多個文件合并為一個文件的方法
今天小編就為大家分享一篇關于shell命令實現(xiàn)當前目錄下多個文件合并為一個文件的方法,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-02-02