用TCL/EXPECT腳本實現telnet批處理
想要完成telnet批處理,其實方法有很多。那么我們這里可以通過一個TCL/EXPECT腳本來完成。下面我們就對這個過程進行一下介紹。這是一個簡單的TCL/EXPECT腳本,完成telnet到遠程設備的功能。通過這個例子,大家可以看到使用TCL/EXPECT腳本構造測試程序,是非常簡潔的。
從今天開始,陸續把我所寫的一些自動測試腳本貼上來,希望對初學者有所幫助。由于目前沒有找好合適的服務器存放代碼,所以代碼先貼在blog的正文中,以后再提供完整的代碼下載。
我telnet批處理測試腳本運行在debian linux下,使用/usr/bin/expect進行解釋執行。為了簡化處理,把一些常用的功能編寫成函數,放在commonLib.exp文件中,其它腳本文件可以使用source commonLib.exp命令引用這些函數。
下面的函數完成telenet到目標機器并login。從其實現上大家可以看到tcl/expect編寫測試腳本的簡潔。
這個函數帶有三個參數,分別是目標機器的IP地址ipaddr,登錄用戶名user和登錄密碼,telenet的端口號采用默認的23端口。
函數中使用了三個全局變量,g_prompt,g_usrPrompt和g_pwdPrompt,分別表示登錄后的命令提示符,提示用戶名輸入的提示符,以及提示密碼輸入的提示符,這三個全局變量定義在global.exp中。之所以采用全局變量,是因為這些值使用比較廣泛,但在不同設備中都不相同。使用全局變量可以方便修改。
代碼如下:
- #************************************************
- # telnet login routine
- #
- # @PARAMS
- # ipaddr - remote device ip address
- # user - user name to login in
- # passwd - login password
- #
- # @RETURN
- # spawn_id if login success, otherwise 0
- #************************************************
- proc login
- {
- ipaddr user passwd
- }
- {
- global g_prompt g_usrPrompt g_pwdPrompt
- spawn telnet $ipaddr
- expect
- {
- "$g_usrPrompt"
- {
- exp_send "$user\r\n"
- exp_continue
- }
- "$g_pwdPrompt"
- {
- exp_send "$passwd\r\n"
- exp_continue
- }
- -ex "$g_prompt"
- {
- dbgLog "Login Successful\n"
- return $spawn_id
- }
- timeout
- {
- send_user "timeout"
- return 0
- }
- }
- }
這樣telent批處理的TCL/EXPECT腳本過程就完成了。