我对Expect完全不熟悉......我需要编写一个脚本,它将远程登录到MS服务器,在那里显示当前会话并注销特定用户。附上脚本。
#!/bin/bash
# execute expect part
/usr/bin/expect <<EOF
#
# telnet to PC
#
spawn telnet 9.9.9.9;
expect "login:";
send "admin\r";
expect "password:";
send "admin\r";
expect "*>";
send "Query session test\r";
expect -re " \[0-9] ";
set val [\$expect_out(0,string)];
send "logoff $val\r";
send "\r";
expect "*>";
send "\x1d";
expect "*>";
send "q\r";
exit 1;
EOF;
我无法让它发挥作用。看来我在定义变量时做错了。当我运行脚本时,我得到以下结果:
C:\Users\admin>Query session test
SESSIONNAME USERNAME ID STATE TYPE DEVICE
rdp-tcp#0 test 3 Active rdpwd
C:\Users\admin>invalid command name " 3 "
while executing
"$expect_out(0,string)"
invoked from within
"set val [$expect_out(0,string)]"
当我在脚本中使用send_user时,我在telnet会话中得到了正确的输入,但是由于某种原因它根本不接受它作为命令。
感谢任何帮助。谢谢。
答案 0 :(得分:1)
Expect会将匹配括号之间的内容视为命令。
set val [\$expect_out(0,string)]
表示执行名为 $ expect_out(0,string)的命令(在这种情况下,它是 3 。)并将命令输出分配给<强> VAL 即可。这就是输出显示invalid command name " 3 "
的原因,因为没有这样的命令。
将行更改为set val $expect_out(0,string)
,我相信情况会好转。
BTW,send_user
就像puts
。它只将消息打印到标准输出,而不是生成的进程。