如何 "expect" 期望脚本中的变量?
How to "expect" a variable in an expect sript?
我正在尝试自动执行一些用于设置打印机的 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 应该是我作为参数传递的变量。我如何 "expect" 这个 ??以下是我到目前为止的代码。
#!/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"
程序好像超时了,直接退出了。我怀疑我写错了期望行。任何帮助,将不胜感激。
不要"expect"满输出;相反,只需关注唯一标识您正在执行的任何内容的当前状态的序列。在您的情况下,这可能是菜单 headers,例如“=== Main Menu ===”。如果你事先知道每次显示这样那样的菜单时你都会选择X选项,那么这就是最好的处理方式。期望太多容易出错。
已编辑:
这是一个示例片段:
expect "=== Main Menu ==="
send "1\r"
expect "=== IP Parameters Menu ==="
send "1\r"
我正在尝试自动执行一些用于设置打印机的 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 应该是我作为参数传递的变量。我如何 "expect" 这个 ??以下是我到目前为止的代码。
#!/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"
程序好像超时了,直接退出了。我怀疑我写错了期望行。任何帮助,将不胜感激。
不要"expect"满输出;相反,只需关注唯一标识您正在执行的任何内容的当前状态的序列。在您的情况下,这可能是菜单 headers,例如“=== Main Menu ===”。如果你事先知道每次显示这样那样的菜单时你都会选择X选项,那么这就是最好的处理方式。期望太多容易出错。
已编辑: 这是一个示例片段:
expect "=== Main Menu ==="
send "1\r"
expect "=== IP Parameters Menu ==="
send "1\r"