函式詳解 function shell學習

2021-08-06 05:11:43 字數 2257 閱讀 3789

源**見github:

兩種方式宣告函式:

1.」function」不可以省略(bash)

function

find

2.不得新增引數

find()
兩種宣告方式效果等價。

注意

直接指定函式名即可。一定要注意在宣告之後才可以呼叫

正確的呼叫方式:

我們看一下返回結果:

既然把函式也當作乙個小指令碼,那麼函式也有退出狀態碼咯?bingo! 函式執行結束後也會有乙個退出狀態碼。可以用$?變數來顯示上一條命令/函式執行結束的退出狀態碼。退出狀態碼中,預設的常用狀態碼這裡有介紹->blog<-

當我們不想使用預設的退出狀態碼時,怎麼辦呢?當然,shell也為我們提供了return,像其他語言函式中return 一樣,不過(整形)返回值必須在0~255之間。否則將會被進行 模256的運算,除此之外return也不可以返回字串或者其他型別,那麼我們想要返回字串時怎麼辦呢?我們需要呼叫函式其他命令去使函式有輸出值。

return

我們來看一下return 的使用:

那麼,我麼想要返回字串時怎麼辦呢?我們需要這樣做:捕獲函式的輸出到乙個變數

函式的輸出

我們來看一下函式的輸出,函式的輸出其實是值得函式中的命令的輸出值的總和,我們來看這麼乙個例子:

呼叫: 分別是普通呼叫捕獲返回值呼叫

返回值:我們用result捕獲 ` `中運算的結果(即函式的輸出)

從兩次呼叫的結果順序來看,普通呼叫按正常順序輸出,而捕獲返回值呼叫則將第1、3行的echo作為函式的輸出來對待。所以放在最後輸出。

引數

函式中使用引數

在上面的例子裡我們也了解,函式被視為乙個乙個小型的指令碼看待。那麼在傳參的時候與指令碼一樣。

fun

name var0 var1

直接在函式名稱後跟引數即可,在引用的時候用

$1

#呼叫第乙個引數

$n#呼叫第n個引數(n>0;n=0時變數為當前指令碼檔名)

$##返回引數個數n

全域性變數

全域性變數指的是在shell指令碼中任何(定義後)地方都有效的變數,當然作為shell指令碼的配置檔案變數–環境變數,自然可以被視為全域性變數來使用。

區域性變數

區域性變數比全域性變數的作用範圍小。在函式中,作為臨時變數就沒有必要將作用域宣告那麼廣,以免引起意想不到的衝突。

宣告區域性變數的方法:(加 local)

local var0
例子:

函式的呼叫,全域性變數的宣告,引數的使用方法

執行結果

與c的標頭檔案類似,在shell中,也可以定義"庫檔案",然後再另乙個檔案中匯入。庫檔案沒有特殊宣告或者定義,也是指令碼檔案.sh。

使用庫函式的關鍵在於導入庫檔案。我們用source來匯入,source實際上會在當前shell上下文中執行命令,從而達到匯入效果。

source別名 . (點操作符)

我們來看乙個例子:

導入庫檔案,function.sh

執行結果 bash function.sh

從執行結果可以看出,source將funlib.sh引入了function.sh所處的shell上下文中,所以$0顯示的都是function.sh檔名。

在funlib.sh檔案中宣告過的函式在function.sh中可以直接呼叫,實現了定義和使用分別處理。

向方才講述的那樣使用函式,每次都需要自己去匯入定義的庫檔案。那麼,我們可不匯入直接使用呢?答案是可以的。方法就是在shell的配置檔案.bashrc中宣告該函式,因為每次啟動shell都會載入.bashrc檔案,所以就實現了」自動匯入」.

mod函式詳解

我們知道,mod函式是乙個求餘函式,其格式為 mod nexp1,nexp2 即是兩個數值表示式作除法運算後的餘數。那麼 兩個同號整數求餘與你所知的兩個正數求餘完全一樣 即兩個負整數與兩個正整數的演算法一樣 一 兩個異號整數求餘 1.函式值符號規律 餘數的符號 mod 負,正 正 mod 正,負 負...

CDC PatBlt 函式詳解。

函式功能 該函式使用當前選入指定裝置環境中的刷子繪製給定的矩形區域。通過使用給出的光柵操作來對該刷子的顏色和表面顏色進行組合。函式原型 bool patblt hdc hdc,int nxleft,int nyleft,int nwidth,int nheight,dword dwrop 引數 hd...

php header 函式詳解

一 作用 php只是以http協議將html文件的標頭送到瀏覽器,告訴瀏覽器具體怎麼處理這個頁面,至於傳送的內容則需要熟悉一下http協議了,與php無關了,可參照http www.w3.org protocols rfc2616 rfc2616。傳統的標頭一定包含下面三種標頭之一,並只能出現一次。...