Во-первых, я спрашиваю об этом как новичок в написании сценариев, в настоящее время у меня есть ожидаемый сценарий, который автоматически входит в систему на предопределенных устройствах Cisco и выполняет определенные команды, я хотел бы обновить свой сценарий, чтобы этот же сценарий мог также создавать резервные копии устройств Juniper.
В идеале я хотел бы, чтобы скрипт делал (в псевдокоде)
login / send credentials
expect prompt
send command "show version"
if output contains "JUNOS" then
send command 1
send command 2
send command 3
otherwise if output contains "Cisco" then
send command 1
send command 2
send command 3
Извините, если об этом спрашивали раньше, но я пытался искать и искать и не смог найти ответ, если кто-нибудь может помочь с этим, я был бы очень признателен. Я также включил свой текущий сценарий ожидания для вашей справки (этот сценарий вызывается сценарием BASH)
set timeout 5
set hostname [lindex $argv 0]
set username "user"
set password "pass"
spawn ssh $username@$hostname
expect "Password:"
send "$password\n"
expect "#" {
send "terminal length 0\n"
send "show running-config\n"
expect "end\r"
send "\n"
send "exit\n"
}
---- ОБНОВИТЬ ---
Спасибо за ваш вклад, Динеш - я обновил свой сценарий, чтобы включить то, что вы предоставили (как показано ниже)
set timeout 5
set hostname [lindex $argv 0]
set username "user"
set password "pass"
set prompt "(>|#|\\\$) $"
spawn ssh $username@$hostname
expect "*assword:"
send $password\r
send \r
expect -re $prompt {
send "show version\r"
expect -re $prompt
expect *;
set output $expect_out(buffer);
#Basic string check logic with Tcl
if { [string first "JUNOS" $output ]!=-1 } {
send "show configuration | display set | no-more"
expect -re $prompt
send "exit\r"
} else {
send "terminal length 0\r"
expect -re $prompt
send "show run\r"
expect "end"
send \r
expect -re $prompt
send "exit\r"
}
}
Однако, когда я запускаю этот скрипт, проблема заключается в том, что вывод «show version», похоже, не соответствует моей «проверке строки», и поэтому скрипт игнорирует оператор «if» и переходит к оператору «else». .
Вывод команды "show version" приведен ниже - что мне нужно изменить, чтобы строка "JUNOS" совпадала?
user@host> show version
Hostname: host
Model: srx240h
JUNOS Software Release [11.4R7.5]
--- РЕДАКТИРОВАТЬ 2: вывод из скрипта
05c4rw@testpc:~/script$ ./ssh.sh
spawn ssh user@juniperhost
## LOGIN BANNER - Removed for brevity
user@juniperhost's password:
--- JUNOS 11.4R7.5 built 2013-03-01 11:40:03 UTC
user@juniperhost> show version
Hostname: juniperhost
Model: srx240h
JUNOS Software Release [11.4R7.5]
user@juniperhost> show configuration | display set | no-more
set version 11.4R7.5
## *** OUTPUT REMOVED FOR BREVITY / PRIVACY ***
## *** END OF OUTPUT from previous command
user@juniper> spawn ssh user@ciscohost
password:
## LOGIN BANNER - removed for brevitiy
ciscohost#05c4rw@testpc:~/script$
expect *
перед отправкойshow version
и напечатайте значениеoutput
. Обновите так же здесь. - person Dinesh   schedule 13.01.2015if-else
. - person Dinesh   schedule 13.01.2015output
. Код не может пропустить циклif-else
. Поток кода должен быть либо сif
, либо сelse
- person Dinesh   schedule 13.01.2015