資源描述:
《linux下交互式命令expect》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、[目錄]? ? 1.摘要? 2.關(guān)鍵字? 3.簡介? 4.Expect綜述? 5.callback? 6.passwd和一致性檢查? 7.rogue和偽終端? 8.ftp? 9.fsck? 10.多進(jìn)程控制:作業(yè)控制? 11.交互式使用Expect? 12.交互式Expect編程? 13.非交互式程序的控制? 14.Expect的速度? 15.安全方面的考慮? 16.Expect資源? 17.參考書籍?1.[摘要]? 現(xiàn)代的Shell對程序提供了最小限度的控制(開始,停止,等等),而把交互的特性留給了用戶。這意味著有些程序
2、,你不能非交互的運(yùn)行,比如說passwd。有一些程序可以非交互的運(yùn)行,但在很大程度上喪失了靈活性,比如說fsck。這表明Unix的工具構(gòu)造邏輯開始出現(xiàn)問題。Expect恰恰填補(bǔ)了其中的一些裂痕,解決了在Unix環(huán)境中長期存在著的一些問題。? Expect使用Tcl作為語言核心。不僅如此,不管程序是交互和還是非交互的,Expect都能運(yùn)用。這是一個(gè)小語言和Unix的其他工具配合起來產(chǎn)生強(qiáng)大功能的經(jīng)典例子。? ? 本部分教程并不是有關(guān)Expect的實(shí)現(xiàn),而是關(guān)于Expect語言本身的使用,這主要也是通過不同的腳本描述例子來體現(xiàn)。其中的幾個(gè)例子還例證了Expect
3、的幾個(gè)新特征。? ?2.[關(guān)鍵字]? ? Expect,交互,POSIX,程序化的對話,Shell,Tcl,Unix;?3.[簡介]? ? 一個(gè)叫做fsck的Unix文件系統(tǒng)檢查程序,可以從Shell里面用-y或者-n選項(xiàng)來執(zhí)行?!≡谑謨訹1]里面,-y選項(xiàng)的定義是象這樣的。? “對于fsck的所有問題都假定一個(gè)“yes”響應(yīng);在這樣使用的時(shí)候,必須特別的小心,因?yàn)樗鼘?shí)際上允許程序無條件的繼續(xù)運(yùn)行,即使是遇到了一些非常嚴(yán)重的錯(cuò)誤”? ? 相比之下,-n選項(xiàng)就安全的多,但它實(shí)際上幾乎一點(diǎn)用都沒有。這種接口非常的糟糕,但是卻有許多的程序都是這種風(fēng)格。
4、 文件傳輸程序ftp有一個(gè)選項(xiàng)可以禁止交互式的提問,以便能從一個(gè)腳本里面運(yùn)行。但一旦發(fā)生了錯(cuò)誤,它沒有提供的處理措施。? Expect是一個(gè)控制交互式程序的工具。他解決了fsck的問題,用非交互的方式實(shí)現(xiàn)了所有交互式的功能。Expect不是特別為fsck設(shè)計(jì)的,它也能進(jìn)行類似ftp的出錯(cuò)處理。? fsck和ftp的問題向我們展示了象sh,csh和別的一些shell提供的用戶接口的局限性?!hell沒有提供從一個(gè)程序讀和象一個(gè)程序?qū)懙墓δ堋_@意味著shell可以運(yùn)行fsck但只能以犧牲一部分fsck的靈活性做代價(jià)。有一些程序根本就不能被執(zhí)行。比如說,如果
5、沒有一個(gè)用戶接口交互式的提供輸入,就沒法運(yùn)行下去。其他還有象Telnet,crypt,su,rlogin等程序無法在shell腳本里面自動(dòng)執(zhí)行。還有很多其他的應(yīng)用程序在設(shè)計(jì)是也是要求用戶輸入的。? Expect被設(shè)計(jì)成專門針和交互式程序的交互。一個(gè)Expect程序員可以寫一個(gè)腳本來描述程序和用戶的對話。接著Expect程序可以非交互的運(yùn)行“交互式”的程序。寫交互式程序的腳本和寫非交互式程序的腳本一樣簡單。Expect還可以用于對對話的一部分進(jìn)行自動(dòng)化,因?yàn)槌绦虻目刂瓶梢栽阪I盤和腳本之間進(jìn)行切換。?bes[2]里面有詳細(xì)的描述。簡單的說,腳本是用一種解釋性語
6、言寫的。(也有C和C++的Expect庫可供使用,但這超出了本文的范圍).Expect提供了創(chuàng)建交互式進(jìn)程和讀寫它們的輸入和輸出的命令。 Expect是由于它的一個(gè)同名的命令而命名的。? Expect語言是基于Tcl的。Tcl實(shí)際上是一個(gè)子程序庫,這些子程序庫可以嵌入到程序里從而提供語言服務(wù)?!∽罱K的語言有點(diǎn)象一個(gè)典型的Shell語言。里面有給變量賦值的set命令,控制程序執(zhí)行的if,for,continue等命令,還能進(jìn)行普通的數(shù)學(xué)和字符串操作。當(dāng)然了,還可以用exec來調(diào)用Unix程序。所有這些功能,Tcl都有。Tcl在參考書籍Outerhour[3]
7、[4]里有詳細(xì)的描述。? Expect是在Tcl基礎(chǔ)上創(chuàng)建起來的,它還提供了一些Tcl所沒有的命令。spawn命令激活一個(gè)Unix程序來進(jìn)行交互式的運(yùn)行。 send命令向進(jìn)程發(fā)送字符串。expect命令等待進(jìn)程的某些字符串?!xpect支持正規(guī)表達(dá)式并能同時(shí)等待多個(gè)字符串,并對每一個(gè)字符串執(zhí)行不同的操作。expect還能理解一些特殊情況,如超時(shí)和遇到文件尾。? expect命令和Tcl的case命令的風(fēng)格很相似。都是用一個(gè)字符串去匹配多個(gè)字符串。(只要有可能,新的命令總是和已有的Tcl命令相似,以使得該語言保持工具族的繼承性)。下面關(guān)于expect的定
8、義是從手冊[5]上摘錄下來的。? expe