shell非常實用的函式功能

2021-10-07 22:53:59 字數 2077 閱讀 9376

與大多數開發語言一樣,shell同樣支援函式功能。函式就是給一段**起乙個別名,也就是函式名,定義函式名的規則與定義變數名的規則基本一致,但是函式名執行以數字開頭。

使用函式可以方便地封裝某種特定的功能**,在呼叫函式時不需要關心它是如何實現的,只需知道這個函式是做什麼的,就可以直接呼叫它完成某項功能。函式必須先定義,才能被呼叫。

合理地使用函式可以將乙個大的工程分割為若干的小功能模組,**的可讀性更好,還可以有效的避免**重複。

函式定義方式

定義函式的語法格式多種,可以任選一種方式,呼叫函式時直接寫函式名即可。

方式一:

如果你嫌麻煩,函式定義時也可以不寫 function 關鍵字

函式名稱(

)

由包圍的部分稱為函式體,呼叫乙個函式,實際上就是執行函式體中的**。

方式二:

function 函式名(

)

function是 shell 中的關鍵字,專門用來定義函式;

方式三:

如果寫了 function 關鍵字,也可以省略函式名後面的小括號

function 函式名
語法格式演示在命令列就可以直接演示函式的定義和呼叫,例如:

定義函式並不會導致函式內的任何命令被執行,僅當通過函式名稱呼叫時。函式內的命令才會被觸發執行。

在實際編寫指令碼時,經常會使用函式的功能給指令碼編寫提示資訊,比如指令碼的幫助或用法資訊。下面就是這樣的示例指令碼檔案。

功能描述:使用函式輸出幫助資訊.

#!/bin/bash

function print_usage(

)case

$1in

--memory|-m)

free;;

--network|-n)

ip -s link;;

--help|-h)

print_usage;;*)

print_usage;

;esac

通過上面的示例可以知道,函式其實類似於別名,就是給一段**起乙個別名,當呼叫該別名時函式中的**就會觸發執行。但是,前面示例中函式並不能被反覆呼叫,因為函式體內編寫的**用全部都是常量,所以在第二次被呼叫時就會建立名稱一樣的目錄與檔案。

這樣的函式並不靈活。怎麼解決這個問題呢?答案是使用變數! shell中的函式支援傳遞引數,可以通過向函式體內傳遞變數引數,確保函式可以被反覆呼叫。可以通過變數$1,$2讀取位置引數,在呼叫函式時新增相應的引數即可,或者讀取其他全域性變數都可以實現傳遞變數引數的功能。

下面我們可以編寫乙個監控伺服器功能,可以寫成函式,通過傳遞變數就可以編寫乙個通用的監控服務是否啟動的指令碼。

功能描述:使用函式檢查服務是否啟動的案例指令碼.

上面的指令碼在呼叫函式時新增了不止乙個引數,而在函式體內通過$@就可以讀取所有位置引數,並通過for迴圈遍歷每個引數,在for迴圈內部使用if語句判斷服務是否啟動。

這個指令碼中定義的函式也可以被反覆呼叫,每次呼叫時新增不同的位置引數,即可檢查不同的服務的狀態。

四個PHP非常實用的功能

1.php函式的任意數目的引數 您可能知道php允許你定義乙個預設引數的函式。但您可能並不知道php還允許你定義乙個完全任意的引數的函式 下面是乙個示例向你展示了預設引數的函式 兩個預設引數的函式 function foo arg1 arg2 程式設計客棧 foo hello world 輸出 ar...

php sql 語法解析函式,非常實用

if function exists parse sql if sql 跳過以 或者 開頭的單行注釋 if preg match line 跳過以 包裹起來的單行注釋 if preg match line 多行注釋開始 if substr line,0,2 多行注釋結束 if substr line...

PHP實用的功能函式

1 2 獲取類 物件的方法列表 3 param unknown argument 類 物件 4 param array string filter 過濾 5 return array 類似 6 78function class get methods argument,filter null 25 ...