Expect中的特殊關(guān)鍵字用于匹配過(guò)程,代表某些特殊含義或狀態(tài),一般用于 expect 族命令中而不能在外面單獨(dú)使用,也可以理解為事件,使用上類似于:
expect eof { }
一、eof
eof(end-of-file)關(guān)鍵字用于匹配結(jié)束符,比如文件的結(jié)束符、FTP 傳輸停止等情況,在這個(gè)關(guān)鍵字后跟上動(dòng)作來(lái)做進(jìn)一步的控制,特別是 FTP 交互操作方面,它的作用很大。用一個(gè)例子來(lái)看看:
swawn ftp anonymous@10.11.15.105.110
expect {
“password:” {exp_send “who am i”}
eof {ftp connect close}
}
interact {}
二、timeout
timeout是expect中的一個(gè)重要變量,它是一個(gè)全局性的時(shí)間控制開(kāi)關(guān),你可以通過(guò)為這個(gè)變量賦值來(lái)規(guī)定整個(gè)expect操作的時(shí)間,注意這個(gè)變量時(shí)服務(wù)于expect全局的,它不會(huì)糾纏于某一條命令,即時(shí)命令沒(méi)有任何錯(cuò)誤,到事件仍然會(huì)被集火這個(gè)變量,但這個(gè)時(shí)間達(dá)到以后除了激活一個(gè)開(kāi)關(guān)之外不會(huì)做其他的事情,如何處理是腳本編寫人員的事情,看看它的實(shí)際使用方法:
set timeout 60
spawn ssh root@172.16.1.31
expect “password:” {send “word\r”}
expect timeout {puts “exoect wai timeout”; return}
上面的處理中,首先將timeout設(shè)置為60秒,當(dāng)出現(xiàn)問(wèn)題的時(shí)候程序可能會(huì)停止下來(lái),只要到60秒,就會(huì)激活下面的timeout動(dòng)作,這里我打印一個(gè)信息并停止了腳本的運(yùn)行。(例子是打印信息并且停止了腳本的運(yùn)行,這里可以根據(jù)自己的需求或思路,規(guī)定相關(guān)動(dòng)作)
在另一種expect格式中,我們還有一種設(shè)置timeout變量的方法,看看下面的例子:
spawn ssh root@172.16.1.31
expect {
-timeout 60
-re “password:” {exp_send “word\r”}
-re “Topsecos#” { }
timeout {puts “Expect was timeout”; return}
}
在expect命令中間加上一個(gè)小橫杠,也可以設(shè)置timeout變量
timeout變量中,設(shè)置為0表示立即超時(shí),-1則表示永不超時(shí)
expect {
-timeout 20
“yes/no” {send “yes\r”; exp_continue}
“password” {send “$password\r”}
timeout {puts “expect connect timeout,pls contact oldboy.”; return}
}
聯(lián)系客服