期望脚本正则表达式不起作用
expect script regex not working
此脚本未能按预期运行:
#!/usr/bin/expect
set timeout 2
set server [lindex $argv 0]
set user [lindex $argv 1]
set password [lindex $argv 2]
set mac [lindex $argv 3]
set interface "po1"
spawn ssh $user@$server
expect "Password:"
send -- "$password\n"
expect "*>"
send "show mac address-table address $mac\n"
# 100 1cc1.de65.441c dynamic ip,ipx,assigned,other Port-channel43
expect -re { (\d+) *($mac) *(dynamic|static) *(.*) *(.*)} {
set interface $expect_out(5,string)
expect "*>"
send "show interface $interface status\n"
}
send "exit\n"
interact
在执行上面的 show mac 命令后,输出包含一行看起来像下面注释的那一行。但是下面的 expect -re 块永远不会被命中,使其超时并发送退出命令。
示例输出:
生成 ssh 用户@主机
密码:
================= Host login banner =================
host>show mac address-table address 1cc1.de65.441c
Unicast Entries
vlan mac address type protocols port
---------+---------------+--------+---------------------+-------------------------
100 1cc1.de65.441c dynamic ip,ipx,assigned,other Port-channel43
host>exit
Connection to host closed.
您的正则表达式不正确,大括号内的替换不会发生。即 $mac
不会被替换,因为它在大括号内。
expect {
-re "\d+\s+$mac\s+(dynamic|static)\s+\S+\s+(\S+)" { set interface $expect_out(2,string); # Add your further code}
}
此脚本未能按预期运行:
#!/usr/bin/expect
set timeout 2
set server [lindex $argv 0]
set user [lindex $argv 1]
set password [lindex $argv 2]
set mac [lindex $argv 3]
set interface "po1"
spawn ssh $user@$server
expect "Password:"
send -- "$password\n"
expect "*>"
send "show mac address-table address $mac\n"
# 100 1cc1.de65.441c dynamic ip,ipx,assigned,other Port-channel43
expect -re { (\d+) *($mac) *(dynamic|static) *(.*) *(.*)} {
set interface $expect_out(5,string)
expect "*>"
send "show interface $interface status\n"
}
send "exit\n"
interact
在执行上面的 show mac 命令后,输出包含一行看起来像下面注释的那一行。但是下面的 expect -re 块永远不会被命中,使其超时并发送退出命令。
示例输出: 生成 ssh 用户@主机 密码:
================= Host login banner =================
host>show mac address-table address 1cc1.de65.441c
Unicast Entries
vlan mac address type protocols port
---------+---------------+--------+---------------------+-------------------------
100 1cc1.de65.441c dynamic ip,ipx,assigned,other Port-channel43
host>exit
Connection to host closed.
您的正则表达式不正确,大括号内的替换不会发生。即 $mac
不会被替换,因为它在大括号内。
expect {
-re "\d+\s+$mac\s+(dynamic|static)\s+\S+\s+(\S+)" { set interface $expect_out(2,string); # Add your further code}
}