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