TCL / Expect Scripting - использование условного оператора для попытки ввода вторичного пароля для входа
Я очень близок к завершению приложения TCL/TK, которое подключается к точке доступа Cisco через последовательное соединение (RS232} и дает ему IP-адрес (очень простой)
Тем не менее, я хотел бы, чтобы мой сценарий попытался использовать дополнительный пароль, если первый не удастся
Вот как Cisco CLI ведет себя с последовательным соединением, когда неверный пароль вводится 3 раза (имя пользователя не требуется, запрашивается только пароль)
Password:
Password:
Password:
% Bad secrets
Опять же, если пароль по умолчанию "Cisco" не работает, мне нужен скрипт, чтобы попробовать дополнительный пароль "Cisco2"
Вот моя последняя неудачная попытка решить эту проблему.
expect "*>" {send "en\r"}
expect {
"Password:" {send "Cisco\r"; exp_continue}
"Password:" {send "Cisco2\r"; exp_continue}
}
expect "*#" {send "config t\r"}
Заранее спасибо за помощь.
1 ответ
Самый простой способ - это создать список паролей, которые вы должны попробовать:
set passwords {"Cisco" "Cisco2"}
set idx 0
expect "*>"
send "en\r"
expect {
"Password:" {
send "[lindex $passwords $idx]\r"
incr idx
exp_continue; # Continue to wait for the "after" prompt
}
"*#" {send "config t\r"}
}
Хитрость в том, что вы должны также expect
то, что следует, чтобы вы не использовали тайм-ауты и тому подобное. (Ну, при условии, что вы не хотите тайм-ауты. Если вы хотите, идите прямо сейчас!) Это потому, что expect
ожидает все свои предложения о совпадении одновременно. В вашем глючном коде у вас было два предложения с одинаковым текстом соответствия, поэтому он всегда выбирал первое из них (IIRC, если в текущей точке совпадают несколько предложений, выбирается первая возможная ветвь).