日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

對話 UNIX,第 6 部分: 通過腳本實現(xiàn)操作的自動化

下面是簡介: 如果您曾經(jīng)在資深 Unix?用戶工作時站在他的背后注視屏幕 , 可能會對命令行上不斷滾動的咒語般的奇怪內(nèi)容感到相當(dāng)迷惑 。如果您閱讀過對話 UNIX 系列中以前的文章(請參見參考資料) , 那么至少所輸入的某些詩一般的神秘內(nèi)容——如波形符 (~)、管道 (|)、變量和重定向(< 和 >)——看起來是熟悉的 。您也許還會認(rèn)出某些 UNIX 命令名稱和組合 , 或者了解何時使用別名來作為某個命令組合的簡寫形式 。
盡管如此 , 還有其他命令組合可能是您無法理解的 , 因為資深的 UNIX 用戶通常以 Shell 腳本 的形式收集一大堆小的、高度專門化的命令組合 , 以簡化或自動化經(jīng)常重復(fù)的任務(wù) 。與輸入或重新輸入(可能)復(fù)雜的命令來完成某個繁瑣任務(wù)不同 , Shell 腳本可以自動化該工作 。
在對話 UNIX 系列(請參見參考資料)的第 6 部分中 , 您將學(xué)習(xí)如何編寫 Shell 腳本和更多命令行訣竅 。
核心就是一個詞:“自動化
有些 Shell 腳本完全就是反復(fù)運行同樣的命令 , 并處理同樣的一組文件 。例如 , 將您的整個主目錄內(nèi)容傳播到三臺遠(yuǎn)程計算機(jī)的 Z Shell 腳本可以像清單 1 一樣簡單 。
清單 1. 跨多臺計算機(jī)同步主目錄的簡單 Shell 腳本
#! /bin/zsh
for each Machine (groucho chico harpo)
rsync -e ssh --times --perms --recursive --delete $HOME $machine:
end
若要將清單 1 用作 Shell 腳本 , 可以將上述內(nèi)容保存到某個文件——例如 simpleprop.zsh——并運行 chmodx simpleprop.zsh 以使該文件成為可執(zhí)行文件 。您可以通過輸入 ./simpleprop.zsh 來運行該腳本 。
如果您想查看 Z Shell 如何展開每個命令 , 可以將 -x 選項添加到腳本的 #!(# 號-感嘆號對通常稱為 shuh-bang)行的結(jié)尾 , 如下所示:
#! /bin/zsh -x
該腳本對 groucho、chico 和 harpo 中的每一臺計算機(jī)運行 rsync 命令 , 并將 $HOME 替換為您的主目錄(例如 , /home/joe) , 將 $Machine 替換為計算機(jī)名稱 。
如清單 1 所示 , 變量和諸如循環(huán)等腳本控制結(jié)構(gòu)使腳本更容易編寫和維護(hù) 。如果您想將第四臺計算機(jī)(例如 zeppo)包括到計算機(jī)池中 , 只需將其添加到該列表 。如果您必須更改 rsync 命令 , 比如說添加另一個選項 , 則只需編輯一個實例 。與在傳統(tǒng)編程中一樣 , 您也應(yīng)該努力避免在 Shell 腳本中進(jìn)行剪切和粘貼 。
使用恰當(dāng)?shù)膮?shù)
其他 Shell 腳本需要參數(shù) , 或要處理的對象——文件、目錄、計算機(jī)名稱——的動態(tài)列表 。例如 , 考慮清單 2 , 這是前一示例的變體 , 它允許您使用命令行來指定您想要與之同步的計算機(jī) 。
清單 2. 允許您指定要處理的計算機(jī)的清單 1 的變體
#! /bin/zsh
for each machine
rsync -e ssh --times --perms --recursive --delete $HOME $machine:
end
假設(shè)您將清單 2 保存在名為 synch.zsh 的文件中 , 您得按照 zsh synch.zsh moe larry curly 的形式調(diào)用該腳本 , 以將主目錄復(fù)制到另外的計算機(jī) larry 和 curly 。
foreach 行上缺少的列表并不是輸入錯誤:如果您省略某個列表 , 則 foreach 結(jié)構(gòu)將處理命令行上給出的參數(shù)列表 。命令行參數(shù)也稱為位置參數(shù) (positional parameter) , 因為某個參數(shù)在命令行上的位置通常在語義上非常重要 。
例如 , 如果您未 指定任何參數(shù) , 則 清單 2 可以利用位置參數(shù)的存在性或非存在性來提供有幫助的用法信息 。增強(qiáng)的腳本如清單 3 所示 。
清單 3. 許多腳本將在未提供參數(shù)時提供有幫助的消息
#! /bin/zsh
if [[ -z $1 || $1 == "--help" ]]
then
echo "usage: $0 Machine [machine ...]
fi
foreach machine
rsync -e ssh --times --perms --recursive --delete $HOME $machine:

推薦閱讀