今天我要介紹關於外殼函數的知識。它是典型Unix操作系統管理員使用命令解決的方案之一。大多數現代外殼都支持這種解決方案——外殼函數使您能夠創建更復雜的序列,但是由於它們作為內置函數運行,在差異相當小時可能更為實用。
如果您管理多種Unix操作系統(特別是在異構環境中),則最艱巨的任務可能是在不同環境之間切換並執行不同的任務,同時還必須考慮系統之間的所有差異。典型的Unix操作系統 管理員擁有一套經常用於輔助管理過程的關鍵實用工具、訣竅和系統。存在各種用於簡化不同過程的關鍵實用工具、命令行鏈和腳本。
其中一些工具來自於操作系統,而大部分的訣竅則來源於長期的經驗積累和減輕系統管理員工作壓力的要求。
使用外殼函數的方法操作Unix操作系統命令
定義函數 function NAME() { # do stuff here } 調用函數時,函數參數作為 $1、$2 等形式來提供,就像在典型的外殼腳本中一樣。因此,您可以定義一個函數,使其執行與 killall 相同的基於字符串的信號發送功能。例如定義一個執行與 killall 相同的信號發送功能的函數 function killall() { ps -ef|grep $1|awk '{ print $2; }'|xargs kill -9 } 請注意,該函數的 awk 部分中的 $2 不會展開,因為您已經對 awk 腳本定義使用了單引號,這樣阻止了展開,並且在此示例中會挑選第二列。
Unix操作系統函數的局限性在於,它們依賴外殼提供支持能力,而這並不總是可能或可用。雖然可以隨心所欲地使內聯外殼函數變得任意長,但在許多情況下,外殼函數並不理想。
例如,在Unix操作系統模擬更復雜的命令或提供命令包裝的超長序列中,您需要分析選項並提供本地化的等效命令,此時內聯函數就沒有多大用處了。在這種情況下,外殼腳本可能更為適合。
Unix操作系統中通過使用命令行工具和外殼流控制(如 if 或case)的組合,您可以使用單個源來選擇各種要使用的選項。有兩個工具在這種情況下很有用:一個工具識別主機(如 hostname 或 uname),另一個工具識別平台 (uname)。
我們這樣就介紹玩了關於Unix操作系統使用外殼函數的知識。