jlzzjlzz亚洲乱熟在线播放

系統城裝機大師 - 唯一官網:www.farandoo.com!

當前位置:首頁 > 腳本中心 > linux shell > 詳細頁面

詳解shell 函數定義與調用

時間:2020-10-11來源:www.farandoo.com作者:電腦系統城

一、Shell函數定義格式

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

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

your_function_name部分----為函數名

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

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

?
1
2
3
4
5
[ function ] your_function_name()
{
  your_shell_commands;
  [return int;]
}

二、基本函數定義與調用

本節程序實現函數定義與調用,注意調用函數是不要使用括號(即如testFun()是不對的),代碼如下:

?
1
2
3
4
5
testFun{
  echo "helloworld!"
}
 
testFun

運行如下:

三、傳遞參數調用

3.1 傳遞參數沒有空格

本節程序實現向被調用函數傳遞參數,$0是運行該腳本的shell傳遞的參數從$1開始、傳遞多個參數是以空格分隔,代碼如下:

?
1
2
3
4
5
6
testFun(){
  echo $1
}
 
param="helloworld!"
testFun $param

運行如下:

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

形式 說明
$# 傳遞到腳本的參數個數
$* 以一個單字符串顯示所有向腳本傳遞的參數
$$ 腳本運行的當前進程ID號
$! 后臺運行的最后一個進程的ID號
$@ 與$*相同,但是使用時加引號,并在引號中返回每個參數。
$- 顯示Shell使用的當前選項,與set命令功能相同。
$? 顯示最后命令的退出狀態。0表示沒有錯誤,其他任何值表明有錯誤。

 

3.2 傳遞參數有空格

本節程序實現向被調用函數傳遞有空格的參數,我們將上節“helloworld!”加個空格變為“hello world!”如下:

?
1
2
3
4
5
6
testFun(){
  echo $1
}
 
param="hello world!"
testFun $param

運行如下:

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

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

?
1
2
3
4
5
6
testFun(){
  echo $1
}
 
param="hello world!"
testFun "$param"

運行如下:

四、獲取返回值

4.1 返回整型

?
1
2
3
4
5
6
7
8
9
10
11
12
testFun(){
  echo "helloworld!"
  return 99
}
 
 
# 千萬要注意shell并不像其他語言直接返回返回值,其返回值放到$?中,這也是為什么只能返回整型的原因
# 所以這種承接方法是錯誤的,獲取到的值是echo打印的內容
# return_value=`testFun`
# 以下才是正確獲取通過return返回的返回值的正確寫法
testFun
echo "the return value is: $?"

4.2 返回字符串

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

?
1
2
3
4
5
6
testFun(){
  echo "helloworld!"
  return "success"
}
 
testFun

運行如下,可以看到運行到return處報錯“-bash: return: success: numeric argument required”

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

?
1
2
3
4
5
6
7
testFun(){
  echo "helloworld!"
  echo "success"
}
 
return_value=$(testFun)
echo "$return_value"

運行如下:

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

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

?
1
2
3
4
5
6
7
testFun(){
  echo "helloworld!"
  return_value="success"
}
 
testFun
echo $return_value

運行如下:

參考:

分享到:

相關信息

  • shell 備份數據庫、代碼上線的腳本

    Shell 是一個用 C 語言編寫的程序,它是用戶使用 Linux 的橋梁。Shell 既是一種命令語言,又是一種程序設計語言。這篇文章主要介紹了shell腳本之備份數據庫、代碼上線,需要的朋友可以參考下...

    2020-02-24

  • Kubernetes/K8s CFSSL 證書相關

    Kubernetes/K8s CFSSL 證書相關,各節點訪問之間使用證書驗證可靠性 work node ——> load banlancer ——>api server ——>etcd<——etcd worknode 訪問load banlancer 需要驗證證書的有限性 所以需要同一個ca根證書,...

    2020-02-24

系統教程欄目

欄目熱門教程

人氣教程排行

站長推薦

熱門系統下載