17.1基本的腳本函數
17.1.1創建函數
管道一:
function name {commands}
管道二:
name(){commands}
name --函數的唯一名稱
commands --構成函數的一條或多條bash shell命令
17.2返回值
函數運行結束時會返回一個退出狀態碼,三種不同的方法為函數生成退出狀態碼
17.2.1默認退出狀態碼
默認情况下,函數的退出狀態碼是函數中最後一條命令返回的退出狀態碼。在函數執行結束後,可以用標準變數$?來確定函數的退出狀態碼。
由於只能返回最後一條語句執行的退出狀態碼,所以使用函數的默認退出狀態碼是很危險的。
17.2.2使用return命令
bash shell使用return命令來退出函數並返回特定的退出狀態碼。return命令允許指定一個整數值來定義函數的退出狀態碼,從而提供了一種簡單的途徑來程式設計設定函數退出狀態碼。
注:(1)函數一結束就取返回值;(2)退出狀態碼必須是0~255。
17.2.3使用函數輸出
17.3在函數中使用變數
17.3.1向函數傳遞參數
函數可以使用標準的參數環境變數來表示命令列上傳給函數的參數。函數名會在$0變數中定義,函數命令列上的任何參數都會通過$1、$2等定義。
也可以用特殊變數$#來判斷傳給函數的參數數目。
17.3.2在函數中處理變數
1.全域變數
全域變數是在shell腳本中任何地方都有效的變數。默認情况下,在腳本中定義的任何變數都是全域變數,在函數外定義的變數可在函數內正常訪問。
2.局部變數
無需在函數中使用全域變數,函數內部使用的任何變數都可以被聲明成局部變數。
local關鍵字可以將變數變為局部變數。也可以在變數賦值語句中使用local關鍵字。
17.4數組變數和函數
17.4.1向函數傳數組參數
17.5函數遞迴
局部變數的一個特性是自成體系,除了從腳本命令列處獲得的變數,自成體系的函數不需要使用任何外部資源。
17.6創建庫
bash shell允許創建函式程式庫檔案,然後在多個腳本中引用該庫檔案。
source命令會在當前shell上下文中執行命令,而不是創建一個新shell,可以用source命令來在shell腳本中運行庫檔案腳本,這樣腳本就可以使用庫中的函數了。
17.7在命令列上使用函數
17.7.1在命令列上創建函數
17.7.2在.bashrc檔案中定義函數
在命令列上直接定義shell函數的缺點時退出shell時,函數就消失了,一個簡單的方法就是將函數定義在一個特定的位置,在每次啟動一個新shell時都會由shell重新載入,最佳地點就是.bashrc檔案,bash shell在每次啟動時都會在主目錄下查找這個檔。
可以在.bashrc檔案中直接定義函數,也在檔案中讀取其他函數檔案來定義函數,下次啟動shell時,所有函數都可以在命令列介面下使用了。