Linux Shell函式定義與呼叫

2022-06-26 01:39:15 字數 2584 閱讀 7402

shell函式定義格式,各部分說明如下:

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

your_function_name部分----為函式名

your_shell_commands部分----為函式**;shell一般以行為單位,但可以使用「\」換行,也可以在單行內使用「;」作為分隔符

return int部分----shell函式可以有返回值,但只能返回整數不能返回字串

[ function

] your_function_name()

本節程式實現函式定義與呼叫,注意呼叫函式是不要使用括號(即如testfun()是不對的),**如下:

testfun

testfun

執行如下:

本節程式實現向被呼叫函式傳遞引數,$0是執行該指令碼的shell傳遞的引數從$1開始、傳遞多個引數是以空格分隔,**如下:

testfun()

param="

helloworld!

"testfun $param

執行如下:

除了可以通過$n形式獲取第n個引數外,還可以使用以下幾個寫法:

形式說明

$#傳遞到指令碼的引數個數

$*以乙個單字串顯示所有向指令碼傳遞的引數

$$指令碼執行的當前程序id號

$!後台執行的最後乙個程序的id號

$@與$*相同,但是使用時加引號,並在引號中返回每個引數。

$-顯示shell使用的當前選項,與set命令功能相同。

$?顯示最後命令的退出狀態。0表示沒有錯誤,其他任何值表明有錯誤。

本節程式實現向被呼叫函式傳遞有空格的引數,我們將上節「helloworld!」加個空格變為「hello world!」如下:

testfun()

param="

hello world!

"testfun $param

執行如下:

可以看到只有空格前的「hello」被列印了出來,空格後的「world!」並沒被列印出來(實際上空格後的"world!"被識別成了$2)

要傳遞有空格的引數也簡單,在傳遞時加上雙引號即可(單引號就不被認為是變數了所以不能用單引號),**如下:

testfun()

param="

hello world!

"testfun

"$param

"

執行如下:

# 千萬要注意shell並不像其他語言直接返回返回值,其返回值放到$?中,這也是為什麼只能返回整型的原因

# 所以這種承接方法是錯誤的,獲取到的值是echo列印的內容

# return_value=`testfun`

# 以下才是正確獲取通過return返回的返回值的正確寫法

testfun

echo

"the return value is: $?

"我們在前面一直說shell函式只能返回整型不能返回字串,我們試一下強行返回字串,**如下:

testfun()

testfun

執行如下,可以看到執行到return處報錯「-bash: return: success: numeric argument required」

所以要通過return返回字串是沒戲的,我們有兩個變通的方法,第一種是通過$()獲取函式的所有列印,**如下:

testfun()

return_value=$(testfun)

echo

"$return_value

"

執行如下:

可以看到成功獲取到了『success「。但同時也可以看到這種做法獲取到的被呼叫函式的所有輸出,單要返回值到得單獨解析一下

另外的一種做法是直接用乙個變數,shell的變數都是全域性的在被呼叫函式中賦值的變數在呼叫函式處也可獲取,**如下:

testfun()

testfun

echo $return_value

執行如下:

參考:

linux shell 自定義函式

linux shell 可以使用者定義函式,然後在shell指令碼中可以隨便呼叫。下面說說它的定義方法,以及呼叫需要注意那些事項。一 定義shell函式 define function 語法 function funname 說明 1 可以帶function fun 定義,也可以直接fun 定義,不...

linux shell函式定義和呼叫

說起函式呼叫,相信大家也不會陌生,然而對於初學shell的我來說,shell中函式呼叫方式卻有點讓我不太習慣,自己也走了不少的彎路,因為傳遞引數時出了乙個很 自然 的錯誤,也讓我吃了不少的苦頭,所以總結一下shell中函式的呼叫方法。一 shell中函式的定義 為了方便程式和管理和模組化並減少 的重...

Linux shell 自定義函式

一 定義shell函式 define function 語法 function funname action return int 說明 1 可以帶function fun 定義,也可以直接fun 定義,不帶任何引數。2 引數返回,可以顯示加 return 返回,如果不加,將以最後一條命令執行結果,...