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