2015-10-19 61 views
0

我正在尝试自动化一些用于设置打印机的telnet命令。如果我手动执行,终端的预期输出如下:如何“期待”一个期望的变量?

Ebins-Mac-Mini:~ ebin$ telnet 192.168.4.104 
Trying 192.168.4.104... 
Connected to 192.168.4.104. 
Escape character is '^]'. 


Welcome to TSP100LAN TELNET Utility. 
Copyright(C) 2008 Star Micronics co., Ltd. 

<< Connected Device >> 
    Device Model : TSP143 (STR_T-001) 
    MAC Address : 00:11:62:08:5B:F6 

login: root   
password: ****** 

Hello root 

=== Main Menu === 
    1) IP Parameters Configuration 
    2) System Configuration 
    3) Change Password 
96) Display Status 
97) Reset Settings to Defaults 
98) Save & Restart 
99) Quit 

Enter Selection: 1 

=== IP Parameters Menu === 
    1) Static 
     IP Address  : 192.168.4.104 
     Subnet Mask  : 255.255.255.0 
     Default Gateway : 192.168.4.1 
    2) Dynamic 
     DHCP   : DISABLE 
99) Back to Main Menu 

Enter Selection: 1 

=== Static IP Address === 
    1) IP Address  : 192.168.4.104 
    2) Subnet Mask  : 255.255.255.0 
    3) Default Gateway : 192.168.4.1 
99) Back to IP Address Menu 

Enter Selection: 

我设法完成它直到第二个选择。但是,对于第二种选择,IP地址:192.168.4.104应该是我作为参数传递的变量。我如何“期待”这?以下是我的代码。

#!/usr/bin/expect -f 
     set timeout 20 
    set IPaddress [lindex $argv 0] 

    set Username "root" 
    set Password "public" 
    spawn telnet $IPaddress 
    expect "login: " 
    send "$Username\r" 
    expect "password: " 
    send "$Password\r" 
    expect {"Hello root\n\n" 
     "=== Main Menu ===\n" 
     "1) IP Parameters Configuration\n" 
     "2) System Configuration\n" 
     "3) Change Password\n" 
     "96) Display Status\n" 
     "97) Reset Settings to Defaults\n" 
     "98) Save & Restart\n" 
     "99) Quit\n\n" 
     "Enter Selection:" 
    } 
    send 1 
    send "\r" 
    expect {"=== IP Parameters Menu ===\n" 
     " 1) Static\n" 
     " IP Address  : " 
     "$IPaddress\n" 
     " Subnet Mask  : 255.255.255.0\n" 
     " Default Gateway : 192.168.4.1\n" 
     " 2) Dynamic\n" 
     " DHCP   : DISABLE\n" 
     " 99) Back to Main Menu\n\n" 
     " Enter Selection: " 
    } 
    send 1 
    send "\r" 

看起来程序到达超时并刚刚退出。我怀疑我写了错误的期望线。任何帮助,将不胜感激。

+0

你并不需要匹配于预期脚本* *整体输出。您只需要期望在脚本方面需要做更多工作时输出信号。 –

+0

意味着我只需要“期待”“输入选择”只? – tuxebin

回答

1

不要“期待”完整的产出;相反,只需关注唯一标识正在执行的任何状态的序列。在你的情况下,这可能是菜单标题,例如“===主菜单===”。如果您事先知道每次显示此类菜单时都会选择选项X,那么这是处理它的最佳方式。期望太多容易出错。

编辑: 下面是一个示例代码段:

expect "=== Main Menu ===" 
send "1\r" 
expect "=== IP Parameters Menu ===" 
send "1\r" 
+0

谢谢!我会尝试这个当我到了明天的工作,回到到u – tuxebin

+0

谢谢!!!!它的工作。现在我可以节省很多时间同时设置打印机,并可以避免错误 – tuxebin

+0

@EbinPIssac:如果这回答你的问题,你可以接受这个答案。 – Dinesh

相关问题