Expect 在网络管理中发挥着重要作用
原文鏈接
廢話 可忽略
?
接觸Expect是迫不得已。系統(tǒng)管理員在工作中經(jīng)常會(huì)遇到這樣的問題,需要實(shí)現(xiàn)一個(gè)自動(dòng)交互的工具,這個(gè)工具可以自動(dòng)Telnet或者Ftp到指定的服務(wù)器上,成功login之后自動(dòng)執(zhí)行一些命令來(lái)完成所需的工作。
當(dāng)然,有很多編程語(yǔ)言可以去解決此類問題,比如用C、Perl、或者Expect。
顯然,盡管C是無(wú)所不能的,但是解決此類問題還是比較困難,除非你熟悉Telnet或者Ftp協(xié)議。
曾經(jīng)見過別人用C實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的Telnet客戶端協(xié)議的程序,可以在這個(gè)程序加入自己的代碼來(lái)捕獲服務(wù)端的輸出,根據(jù)這些輸出來(lái)發(fā)送適當(dāng)?shù)闹噶顏?lái)進(jìn)行遠(yuǎn)程控制。
使用Perl一樣可以實(shí)現(xiàn)這樣的功能,然而,Expect做的更出色,而且除支持Unix/Linux平臺(tái)外,它還支持Windows平臺(tái),它就是為系統(tǒng)管理和軟件測(cè)試方面的自動(dòng)交互類需求而產(chǎn)生的
介紹Expect的時(shí)候,不得不說到TCL,畢竟這個(gè)語(yǔ)言是用TCL寫的,于是,其中除了部分的自有命令外,語(yǔ)法也都是TCL的語(yǔ)法,所以在Expect教程里面,將會(huì)重點(diǎn)通過一些程序來(lái)介紹Expect的功能。
先看一個(gè)最簡(jiǎn)單的Expect程序
#!/usr/bin/expect
set timeout 10
spawn telnet 10.80.1.23
expect "login:"
send "user\r"
expect "Password:"
send "123456\r"
expect "%"
puts “Telnet connection established”
對(duì)于Expect程序,是可以以tcl后綴名結(jié)尾的,上一個(gè)程序的名字為testTelnet.tcl,且執(zhí)行方法和tcl也一致,直接./testTelnet.tcl即可,但是注意文件的第一行,在TCL程序中,第一行的內(nèi)容為
#!/usr/bin/tclsh
而在這里變?yōu)榱?/p>
#!/usr/bin/expect
?
這個(gè)程序的作用如下,
1.?????????建立一個(gè)到10.80.1.23的telnet連接,由spawn telnet 10.32.17.10來(lái)完成,
2.?????????等待屏幕打印login,由expect “l(fā)ogin:”來(lái)實(shí)現(xiàn)
3.?????????然后發(fā)送用戶名user,由send “user\r”來(lái)完成,其中\(zhòng)r表示在輸入user后按下回車鍵
4.?????????等待屏幕打印Password:,由expect “Password”來(lái)實(shí)現(xiàn)
5.?????????發(fā)送密碼123456,同第3步
6.?????????等待登錄成功的提示符%
7.?????????輸出登錄成功消息
這是自動(dòng)通過telnet登錄的程序,基本上程序中的每句話都被解釋過了,唯一剩下的就是set timeout 10是什么意思呢?
我們可以看到,上面expect都是用來(lái)等待某個(gè)結(jié)果出來(lái)的,如果這個(gè)結(jié)果一直不出來(lái)怎么辦?難道程序一直等下去么?當(dāng)然不是,所以這里就有了timeout,也就是程序如果在等待10s種后沒有得到期望結(jié)果,將會(huì)自動(dòng)退出。如果不設(shè)置timeout的話,expect默認(rèn)的時(shí)間是20s。
而至于spawn,send,expect,這些都是內(nèi)置的expect命令,其中spawn專門用來(lái)建立網(wǎng)絡(luò)連接的時(shí)候用的,記住就可以了。
在這里,需要提示的是在使用expect命令等待內(nèi)容的時(shí)候,后面的內(nèi)容一定要是屏幕輸出的最后內(nèi)容。比如上述程序中等到了“l(fā)ogin”,“%”等,都是屏幕輸出的最后,至于為什么,將在以后描述。
?
轉(zhuǎn)載于:https://www.cnblogs.com/wangkangluo1/archive/2012/06/13/2548655.html
總結(jié)
以上是生活随笔為你收集整理的Expect 在网络管理中发挥着重要作用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MSSQL同时操作数据加锁问题
- 下一篇: T-Sql 实现类似访问数组变量的操作