У меня есть ввод с удаленного устройства, которое я хочу поймать, и на его основе выполняется несколько команд - скрипт работает нормально!но есть одна проблема - ожидаем, что циклично проходит по каждой строке (с exp_continue), и когда найти совпадение REGEX, выполняется несколько команд, основанных на совпадении ($ hope_out) .. работает нормально .., но буквально основано на каждой строке!:( и я хочу как-то сравнить $pect_out (n, string) с другими предыдущими и фьючерсными совпадениями и выполнить ТОЛЬКО одну команду на основе уникального совпадения.
Может быть, проще привести пример:
Вход содержит: дублированные строки «1/1/1» и «1/1/2», но в разных строках, и я их ловлю и выполняю дублированные команды на их основе: (
Ввод:
VL. Interface
-----------------------
10 vlanIf:1/1/1:10
20 vlanIf:1/1/3:20
30 vlanIf:1/1/2:30
40 vlanIf:1/1/4:40
50 vlanIf:1/1/2:50
60 vlanIf:1/1/1:60
70 vlanIf:1/1/1:70
Скрипт:
#!/usr/bin/expect -f
telnet ...
---snipped--
set prompt "#"
# cmd1
expect "$prompt" { send "show interface vlan\r" ; set is_ok "cmd1" }
if { $is_ok != "cmd1" } { send_user "\n## #----- 9 Exit on executing command3\n" ; exit }
# cmd2 ... n
expect -re "(vlanIf:)(\\d+/\\d+/\\d+):(\\d\{1,4\})" {
set secondMatch "$expect_out(2,string)"
send "show test1 $secondMatch\r"
send "show test2 $secondMatch\r"
send "show test3 $secondMatch\r"
exp_continue
}
В результате моей попытки получается:
send "show test1 1/1/1\r"
send "show test2 1/1/1\r"
send "show test3 1/1/1\r"
send "show test1 1/1/3\r"
send "show test2 1/1/3\r"
send "show test3 1/1/3\r"
send "show test1 1/1/2\r"
send "show test2 1/1/2\r"
send "show test3 1/1/2\r"
send "show test1 1/1/4\r"
send "show test2 1/1/4\r"
send "show test3 1/1/4\r"
send "show test1 1/1/2\r"
send "show test2 1/1/2\r"
send "show test3 1/1/2\r"
send "show test1 1/1/1\r"
send "show test2 1/1/1\r"
send "show test3 1/1/1\r"
send "show test1 1/1/1\r"
send "show test2 1/1/1\r"
send "show test3 1/1/1\r"
Результаты должны быть такими:
send "show test1 1/1/1\r"
send "show test2 1/1/1\r"
send "show test3 1/1/1\r"
send "show test1 1/1/3\r"
send "show test2 1/1/3\r"
send "show test3 1/1/3\r"
send "show test1 1/1/2\r"
send "show test2 1/1/2\r"
send "show test3 1/1/2\r"
send "show test1 1/1/4\r"
send "show test2 1/1/4\r"
send "show test3 1/1/4\r"
* 1 /1/1, 1/1/3, 1/1/2, 1/1/4 являются переменными, но для примера я поместил содержимое: