
- Unix/Linux 初學者指南
- Unix/Linux - 首頁
- Unix/Linux - 什麼是 Linux?
- Unix/Linux - 入門
- Unix/Linux - 檔案管理
- Unix/Linux - 目錄
- Unix/Linux - 檔案許可權
- Unix/Linux - 環境
- Unix/Linux - 基本實用程式
- Unix/Linux - 管道與過濾器
- Unix/Linux - 程序
- Unix/Linux - 通訊
- Unix/Linux - vi 編輯器
- Unix/Linux Shell 程式設計
- Unix/Linux - Shell 指令碼
- Unix/Linux - 什麼是 Shell?
- Unix/Linux - 使用變數
- Unix/Linux - 特殊變數
- Unix/Linux - 使用陣列
- Unix/Linux - 基本運算子
- Unix/Linux - 決策
- Unix/Linux - Shell 迴圈
- Unix/Linux - 迴圈控制
- Unix/Linux - Shell 替換
- Unix/Linux - 引號機制
- Unix/Linux - I/O 重定向
- Unix/Linux - Shell 函式
- Unix/Linux - 手冊頁幫助
- 高階 Unix/Linux
- Unix/Linux - 標準 I/O 流
- Unix/Linux - 檔案連結
- Unix/Linux - 正則表示式
- Unix/Linux - 檔案系統基礎
- Unix/Linux - 使用者管理
- Unix/Linux - 系統性能
- Unix/Linux - 系統日誌
- Unix/Linux - 訊號和陷阱
Unix/Linux - Shell 函式
在本章中,我們將詳細討論 Shell 函式。函式使您能夠將指令碼的整體功能分解成更小、更邏輯的子部分,然後可以在需要時呼叫它們來執行其各自的任務。
使用函式執行重複性任務是建立**程式碼重用**的絕佳方法。這是現代面向物件程式設計原則的重要組成部分。
Shell 函式類似於其他程式語言中的子程式、過程和函式。
建立函式
要宣告一個函式,只需使用以下語法:
function_name () { list of commands }
您的函式名稱為**function_name**,您將使用它從指令碼中的其他位置呼叫它。函式名後面必須跟括號,然後是括在大括號中的命令列表。
示例
以下示例演示了函式的使用:
#!/bin/sh # Define your function here Hello () { echo "Hello World" } # Invoke your function Hello
執行後,您將收到以下輸出:
$./test.sh Hello World
向函式傳遞引數
您可以定義一個函式,該函式在呼叫函式時接受引數。這些引數將由**$1**、**$2**等表示。
以下是一個示例,我們傳遞兩個引數Zara和Ali,然後我們在函式中捕獲並列印這些引數。
#!/bin/sh # Define your function here Hello () { echo "Hello World $1 $2" } # Invoke your function Hello Zara Ali
執行後,您將收到以下結果:
$./test.sh Hello World Zara Ali
從函式返回值
如果您從函式內部執行**exit**命令,其效果不僅是終止函式的執行,還會終止呼叫該函式的 Shell 程式的執行。
如果您只想終止函式的執行,則有一種方法可以退出已定義的函式。
根據情況,您可以使用**return**命令從函式返回任何值,其語法如下:
return code
這裡**code**可以是您選擇的任何內容,但顯然您應該選擇在整個指令碼的上下文中具有意義或有用的內容。
示例
以下函式返回一個值 10:
#!/bin/sh # Define your function here Hello () { echo "Hello World $1 $2" return 10 } # Invoke your function Hello Zara Ali # Capture value returnd by last command ret=$? echo "Return value is $ret"
執行後,您將收到以下結果:
$./test.sh Hello World Zara Ali Return value is 10
巢狀函式
函式的一個更有趣的特性是它們可以呼叫自身以及其他函式。呼叫自身的函式稱為**遞迴函式**。
以下示例演示了兩個函式的巢狀:
#!/bin/sh # Calling one function from another number_one () { echo "This is the first function speaking..." number_two } number_two () { echo "This is now the second function speaking..." } # Calling function one. number_one
執行後,您將收到以下結果:
This is the first function speaking... This is now the second function speaking...
從提示符呼叫函式
您可以將常用函式的定義放在您的**.profile**中。這些定義將在您登入時可用,您可以在命令提示符下使用它們。
或者,您可以將定義分組到一個檔案中,例如**test.sh**,然後透過鍵入以下內容在當前 Shell 中執行該檔案:
$. test.sh
這會將**test.sh**中定義的函式讀取並定義到當前 Shell 中,如下所示:
$ number_one This is the first function speaking... This is now the second function speaking... $
要從 Shell 中刪除函式的定義,請使用帶**.f**選項的unset命令。此命令還用於從 Shell 中刪除變數的定義。
$ unset -f function_name