[expect入門一] 2018-08-25

1-introduction:expect introduction;reference;reference2


2-Expect:

????是一個(gè)用來處理交互的命令阱缓。借助Expect敬鬓,我們可以將交互過程寫在一個(gè)腳本上,使之自動(dòng)化完成。形象的說,ssh登錄,ftp登錄等都符合交互的定義寞忿。


3-四個(gè)命令

Expect中最關(guān)鍵的四個(gè)命令是send,expect,spawn,interact。

send:用于向進(jìn)程發(fā)送字符串

expect:從進(jìn)程接收字符串

spawn:啟動(dòng)新的進(jìn)程

interact:允許用戶交互

3.1-?send命令

send命令接收一個(gè)字符串參數(shù)顶岸,并將該參數(shù)發(fā)送到進(jìn)程。

expect1.1> send "hello world\n"

?hello world

fig 1

3.2-expect命令

(1)基礎(chǔ)知識

????expect命令和send命令正好相反叫编,expect通常是用來等待一個(gè)進(jìn)程的反饋辖佣。expect可以接收一個(gè)字符串參數(shù),也可以接收正則表達(dá)式參數(shù)搓逾。和上文的send命令結(jié)合卷谈,現(xiàn)在我們可以看一個(gè)最簡單的交互式的例子:

expect "hi\n"

send "hello there!\n"

這兩行代碼的意思是:從標(biāo)準(zhǔn)輸入中等到hi和換行鍵后,向標(biāo)準(zhǔn)輸出輸出hello there霞篡。

tips: $expect_out(buffer)存儲了所有對expect的輸入世蔗,<$expect_out(0,string)>存儲了匹配到expect參數(shù)的輸入。

比如如下程序:

expect "hi\n"?

send "you typed $expect_out(buffer)"

send "but I only expected $expect_out(0,string)"

當(dāng)在標(biāo)準(zhǔn)輸入中輸入

test

hi

時(shí)朗兵,運(yùn)行結(jié)果如下

you typed: test

hi

I only expect: hi


fig 2
fig 3

(2)模式-動(dòng)作

? ??expect最常用的語法是來自tcl語言的模式-動(dòng)作污淋。這種語法極其靈活,下面我們就各種語法分別說明余掖。

????單一分支模式語法:

????????expect"hi"{send"You said hi"}

????????匹配到hi后寸爆,會(huì)輸出"you said hi"

多分支模式語法:

? ? ? ?expect "hi"{send"You said hi\n"} \"hello"{send"Hello yourself\n"} \"bye"{send"That was unexpected\n"}

????????匹配到hi,hello,bye任意一個(gè)字符串時(shí),執(zhí)行相應(yīng)的輸出。

????????等同于如下寫法:

????????expect {

????????????????????"hi" {send "You said hi\n"}

????????????????????"hello" {send "Hello yourself\n"}

????????????????????"bye" {send "That was unexpected\n"}

}


fig 4


fig 5

(3)?spawn命令

????上文的所有demo都是和標(biāo)準(zhǔn)輸入輸出進(jìn)行交互赁豆,但是我們跟希望他可以和某一個(gè)進(jìn)程進(jìn)行交互仅醇。spawm命令就是用來啟動(dòng)新的進(jìn)程的。spawn后的send和expect命令都是和spawn打開的進(jìn)程進(jìn)行交互的魔种。結(jié)合上文的send和expect命令我們可以看一下更復(fù)雜的程序段了析二。

set timeout-1?

spawn ftp ftp.test.com? ? ?//打開新的進(jìn)程,該進(jìn)程用戶連接遠(yuǎn)程ftp服務(wù)器

expect "Name"? ? ? ? ? ? ? ? //進(jìn)程返回Name時(shí)

send "user\r"? ? ? ? ? ? ? ? ? ?//向進(jìn)程輸入anonymous\r

expect "Password:"? ? ? ? //進(jìn)程返回Password:時(shí)

send "123456\r"? ? ? ? ? ? ?//向進(jìn)程輸入don@libes.com\r

expect "ftp> "? ? ? ? ? ? ? ? ? //進(jìn)程返回ftp>時(shí)

send "binary\r"? ? ? ? ? ? ? ?//向進(jìn)程輸入binary\r

expect "ftp> "? ? ? ? ? ? ? ? ?//進(jìn)程返回ftp>時(shí)

send "get test.tar.gz\r"? ?//向進(jìn)程輸入get test.tar.gz\r

這段代碼的作用是登錄到ftp服務(wù)器ftp ftp.uu.net上节预,并以二進(jìn)制的方式下載服務(wù)器上的文件test.tar.gz叶摄。

(4)interact

到現(xiàn)在為止,我們已經(jīng)可以結(jié)合spawn心铃、expect准谚、send自動(dòng)化的完成很多任務(wù)了。但是去扣,如何讓人在適當(dāng)?shù)臅r(shí)候干預(yù)這個(gè)過程了柱衔。比如下載完ftp文件時(shí),仍然可以停留在ftp命令行狀態(tài)愉棱,以便手動(dòng)的執(zhí)行后續(xù)命令唆铐。interact可以達(dá)到這些目的。下面的demo在自動(dòng)登錄ftp后奔滑,允許用戶交互艾岂。

spawn ftp ftp.test.com

expect "Name"

send "user\r"

expect "Password:"? send"123456\r"

interact




4- 一個(gè)自動(dòng)登錄遠(yuǎn)程服務(wù)器腳本實(shí)例


fig 6
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市朋其,隨后出現(xiàn)的幾起案子王浴,更是在濱河造成了極大的恐慌,老刑警劉巖梅猿,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件氓辣,死亡現(xiàn)場離奇詭異,居然都是意外死亡袱蚓,警方通過查閱死者的電腦和手機(jī)钞啸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來喇潘,“玉大人体斩,你說我怎么就攤上這事∮钡停” “怎么了絮吵?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長忱屑。 經(jīng)常有香客問我源武,道長扼褪,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任粱栖,我火速辦了婚禮话浇,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘闹究。我一直安慰自己幔崖,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布渣淤。 她就那樣靜靜地躺著赏寇,像睡著了一般。 火紅的嫁衣襯著肌膚如雪价认。 梳的紋絲不亂的頭發(fā)上嗅定,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天,我揣著相機(jī)與錄音用踩,去河邊找鬼渠退。 笑死,一個(gè)胖子當(dāng)著我的面吹牛脐彩,可吹牛的內(nèi)容都是我干的碎乃。 我是一名探鬼主播,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼惠奸,長吁一口氣:“原來是場噩夢啊……” “哼梅誓!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起佛南,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤梗掰,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后嗅回,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體及穗,經(jīng)...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年妈拌,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蓬蝶。...
    茶點(diǎn)故事閱讀 38,569評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡尘分,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出丸氛,到底是詐尸還是另有隱情培愁,我是刑警寧澤,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布缓窜,位于F島的核電站定续,受9級特大地震影響谍咆,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜私股,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一摹察、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧倡鲸,春花似錦供嚎、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至优床,卻和暖如春劝赔,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背胆敞。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工着帽, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人竿秆。 一個(gè)月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓启摄,卻偏偏與公主長得像,于是被迫代替她去往敵國和親幽钢。 傳聞我的和親對象是個(gè)殘疾皇子歉备,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,446評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 請不要轉(zhuǎn)載 背景介紹 Expect 程序主要用于人機(jī)對話的模擬,就是那種系統(tǒng)提問匪燕,人來回答 yes/no 蕾羊,或者賬...
    羽風(fēng)之歌閱讀 53,455評論 12 46
  • 1 概述 expect 是由Don Libes基于Tcl(Tool Command Language )語言開發(fā)的...
    ghbsunny閱讀 11,524評論 0 0
  • 作者:(德)博多.舍費(fèi)爾 這本書本多渠道都能聽到,里面的理財(cái)知識的也確實(shí)科普性很強(qiáng)帽驯。昨天和女兒一起聊了這本書和第二...
    碧云小講小讀閱讀 581評論 0 1
  • 我在前行的車上龟再,總路程數(shù)千米,歷時(shí)數(shù)小時(shí)尼变。道旁樹有規(guī)律的倒退利凑,莫名有種秩序美感。我聽著Winter Bird...
    蘇黎世的小透明閱讀 125評論 0 0