溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

帶你了解shell 函數(shù)的定義與調(diào)用

發(fā)布時(shí)間:2020-11-02 16:13:55 來源:億速云 閱讀:149 作者:Leah 欄目:開發(fā)技術(shù)

帶你了解shell 函數(shù)的定義與調(diào)用?針對這個(gè)問題,這篇文章詳細(xì)介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡單易行的方法。

一、Shell函數(shù)定義格式

shell函數(shù)定義格式,各部分說明如下:

[ function ]等中括號(hào)括起來部分----表示可選(即可有可無)

your_function_name部分----為函數(shù)名

your_shell_commands部分----為函數(shù)代碼;shell一般以行為單位,但可以使用“\”換行,也可以在單行內(nèi)使用“;”作為分隔符

return int部分----shell函數(shù)可以有返回值,但只能返回整數(shù)不能返回字符串

[ function ] your_function_name()
{
  your_shell_commands;
  [return int;]
}

二、基本函數(shù)定義與調(diào)用

本節(jié)程序?qū)崿F(xiàn)函數(shù)定義與調(diào)用,注意調(diào)用函數(shù)是不要使用括號(hào)(即如testFun()是不對的),代碼如下:

testFun{
  echo "helloworld!"
}

testFun

運(yùn)行如下:

帶你了解shell 函數(shù)的定義與調(diào)用

三、傳遞參數(shù)調(diào)用

3.1 傳遞參數(shù)沒有空格

本節(jié)程序?qū)崿F(xiàn)向被調(diào)用函數(shù)傳遞參數(shù),$0是運(yùn)行該腳本的shell傳遞的參數(shù)從$1開始、傳遞多個(gè)參數(shù)是以空格分隔,代碼如下:

testFun(){
  echo $1
}

param="helloworld!"
testFun $param

運(yùn)行如下:

帶你了解shell 函數(shù)的定義與調(diào)用

除了可以通過$n形式獲取第n個(gè)參數(shù)外,還可以使用以下幾個(gè)寫法:

形式說明
$#傳遞到腳本的參數(shù)個(gè)數(shù)
$*以一個(gè)單字符串顯示所有向腳本傳遞的參數(shù)
$$腳本運(yùn)行的當(dāng)前進(jìn)程ID號(hào)
$!后臺(tái)運(yùn)行的最后一個(gè)進(jìn)程的ID號(hào)
$@與$*相同,但是使用時(shí)加引號(hào),并在引號(hào)中返回每個(gè)參數(shù)。
$-顯示Shell使用的當(dāng)前選項(xiàng),與set命令功能相同。
$?顯示最后命令的退出狀態(tài)。0表示沒有錯(cuò)誤,其他任何值表明有錯(cuò)誤。

3.2 傳遞參數(shù)有空格

本節(jié)程序?qū)崿F(xiàn)向被調(diào)用函數(shù)傳遞有空格的參數(shù),我們將上節(jié)“helloworld!”加個(gè)空格變?yōu)椤癶ello world!”如下:

testFun(){
  echo $1
}

param="hello world!"
testFun $param

運(yùn)行如下:

帶你了解shell 函數(shù)的定義與調(diào)用

可以看到只有空格前的“hello”被打印了出來,空格后的“world!”并沒被打印出來(實(shí)際上空格后的"world!"被識(shí)別成了$2)

要傳遞有空格的參數(shù)也簡單,在傳遞時(shí)加上雙引號(hào)即可(單引號(hào)就不被認(rèn)為是變量了所以不能用單引號(hào)),代碼如下:

testFun(){
  echo $1
}

param="hello world!"
testFun "$param"

運(yùn)行如下:

帶你了解shell 函數(shù)的定義與調(diào)用

四、獲取返回值

4.1 返回整型

testFun(){
  echo "helloworld!"
  return 99
}


# 千萬要注意shell并不像其他語言直接返回返回值,其返回值放到$?中,這也是為什么只能返回整型的原因
# 所以這種承接方法是錯(cuò)誤的,獲取到的值是echo打印的內(nèi)容
# return_value=`testFun`
# 以下才是正確獲取通過return返回的返回值的正確寫法
testFun
echo "the return value is: $?"

4.2 返回字符串

我們在前面一直說shell函數(shù)只能返回整型不能返回字符串,我們試一下強(qiáng)行返回字符串,代碼如下:

testFun(){
  echo "helloworld!"
  return "success"
}

testFun

運(yùn)行如下,可以看到運(yùn)行到return處報(bào)錯(cuò)“-bash: return: success: numeric argument required”

帶你了解shell 函數(shù)的定義與調(diào)用

所以要通過return返回字符串是沒戲的,我們有兩個(gè)變通的方法,第一種是通過$()獲取函數(shù)的所有打印,代碼如下:

testFun(){
  echo "helloworld!"
  echo "success"
}

return_value=$(testFun)
echo "$return_value"

運(yùn)行如下:

帶你了解shell 函數(shù)的定義與調(diào)用

可以看到成功獲取到了‘success“。但同時(shí)也可以看到這種做法獲取到的被調(diào)用函數(shù)的所有輸出,單要返回值到得單獨(dú)解析一下

另外的一種做法是直接用一個(gè)變量,shell的變量都是全局的在被調(diào)用函數(shù)中賦值的變量在調(diào)用函數(shù)處也可獲取,代碼如下:

testFun(){
  echo "helloworld!"
  return_value="success"
}

testFun
echo $return_value

運(yùn)行如下:

帶你了解shell 函數(shù)的定義與調(diào)用

關(guān)于帶你了解shell 函數(shù)的定義與調(diào)用問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識(shí)。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI