Я пытаюсь написать сценарий ожидания, который позволяет мне переключиться на ssh, искать определенный набор программного обеспечения во флеше, а затем удалить его. Я хотел бы сказать, что если вы видите результат «A», выполните действие «B», и если вы увидите результат «C», выполните действие «B». Все эти результаты отображаются, когда я запускаю одну команду.Я пропускаю цель с exp_continue?
Это пример результата, которого я ожидаю.
B3898_RM23_SW1#dir ?
/all List all files
/recursive List files recursively
all-filesystems List files on all filesystems
bs: Directory or file name
cns: Directory or file name
flash1: Directory or file name
flash2: Directory or file name
flash: Directory or file name
null: Directory or file name
nvram: Directory or file name
system: Directory or file name
tar: Directory or file name
tmpsys: Directory or file name
vb: Directory or file name
xmodem: Directory or file name
ymodem: Directory or file name
<cr>
B3898_RM23_SW1#
Что я ищу - это каталог "flash1:". Теперь существует вероятность того, что они будут состоять из девяти флеш-файловых систем. У вас всегда будет «flash1:»; то, что я хочу сделать, - это войти в каждый из возможных каталогов и удалить либо файл, либо весь каталог. И если у них нет других каталогов, просто чтобы двигаться дальше.
Что я хочу знать, как правильно использовать exp_continue, или если мне нужно использовать его вообще в этом случае. Это то, что я написал, и он скопирует программное обеспечение на flash1, но если flas2 и т. Д. Существуют, он не скопирует или не удаляет программное обеспечение на другие вспышки.
send "dir ?\r"
expect {
-re {\mflash1\M} {
send "delete /force /recursive flash1:c3750-ipservicesk9-mz.122-55.SE5\r"
expect "*#"
send "delete /force /recursive flash1:c3750-ipservicesk9-mz.122-55.SE5.bin\r"
expect "*#"
}
-re {\mflash2\M} {
send "delete /force /recursive flash2:c3750-ipservicesk9-mz.122-55.SE5\r"
expect "*#"
send "delete /force /recursive flash2:c3750-ipservicesk9-mz.122-55.SE5.bin\r"
expect "*#"
}
-re {\mflash3\M} {
send "delete /force /recursive flash3:c3750-ipservicesk9-mz.122-55.SE5\r"
expect "*#"
send "delete /force /recursive flash3:c3750-ipservicesk9-mz.122-55.SE5.bin\r"
expect "*#"
}
-re {\mflash4\M} {
send "delete /force /recursive flash4:c3750-ipservicesk9-mz.122-55.SE5\r"
expect "*#"
send "delete /force /recursive flash4:c3750-ipservicesk9-mz.122-55.SE5.bin\r"
expect "*#"
}
-re {\mflash5\M} {
send "delete /force /recursive flash5:c3750-ipservicesk9-mz.122-55.SE5\r"
expect "*#"
send "delete /force /recursive flash5:c3750-ipservicesk9-mz.122-55.SE5.bin\r"
expect "*#"
}
-re {mflash6\M} {
send "delete /force /recursive flash6:c3750-ipservicesk9-mz.122-55.SE5\r"
expect "*#"
send "delete /force /recursive flash6:c3750-ipservicesk9-mz.122-55.SE5.bin\r"
expect "*#"
}
-re {\mflash7\M} {
send "delete /force /recursive flash7:c3750-ipservicesk9-mz.122-55.SE5\r"
expect "*#"
send "delete /force /recursive flash7:c3750-ipservicesk9-mz.122-55.SE5.bin\r"
expect "*#"
}
-re {\mflash8\M} {
send "delete /force /recursive flash8:c3750-ipservicesk9-mz.122-55.SE5\r"
expect "*#"
send "delete /force /recursive flash8:c3750-ipservicesk9-mz.122-55.SE5.bin\r"
expect "*#"
}
-re {\mflash9\M} {
send "delete /force /recursive flash9:c3750-ipservicesk9-mz.122-55.SE5\r"
expect "*#"
send "delete /force /recursive flash9:c3750-ipservicesk9-mz.122-55.SE5.bin\r"
expect "*#"
}
}
#This deletes the IOS from a single device, then tftps the IOS to flash. If the TFTP fails it tries one more time.
send "copy tftp: flash1:\r"
expect "Address or name of remote host []?"
send "204.208.204.209\r"
expect "Source filename []?"
send "c3750-ipservicesk9-mz.122-55.SE7.bin\r"
expect "Destination filename"
send "\r"
expect {
-re {\mtimed out\M} {
send "copy tftp: flash:\r"
expect "Address or name of remote host []?"
send "XXX.XXX.XXX.XXX\r"
expect "Source filename []?"
send "c3750-ipservicesk9-mz.122-55.SE7.bin\r"
expect "Destination filename [c3750-ipservicesk9-mz.122-55.SE7.bin]?"
send "\r"
expect "*#"
}
-re {\mOK - 13010154 bytes\M}
}
# checks to see if there are other members in the stack, and if there are it will copy the ios from flash1 to the other devices.
send "dir ?\r"
expect {
-re {\mflash\M} {
send "\r"
expect "*#"
}
-re {\mflash1\M} {
send "\r"
expect "*#"
}
-re {\mflash2\M} {
send "copy flash1:c3750-ipservicesk9-mz.122-55.SE7.bin flash2:\r"
expect "Destination filename"
send "\r"
expect "*#"
}
-re {\mflash3\M} {
send "copy flash1:c3750-ipservicesk9-mz.122-55.SE7.bin flash3:\r"
expect "Destination filename"
send "\r"
expect "*#"
}
-re {\mflash4\M} {
send "copy flash1:c3750-ipservicesk9-mz.122-55.SE7.bin flash4:\r"
expect "Destination filename"
send "\r"
expect "*#"
}
-re {\mflash5\M} {
send "copy flash1:c3750-ipservicesk9-mz.122-55.SE7.bin flash5:\r"
expect "Destination filename"
send "\r"
expect "*#"
}
-re {\mflash6\M} {
send "copy flash1:c3750-ipservicesk9-mz.122-55.SE7.bin flash6:\r"
expect "Destination filename"
send "\r"
expect "*#"
}
-re {\mflash7\M} {
send "copy flash1:c3750-ipservicesk9-mz.122-55.SE7.bin flash7:\r"
expect "Destination filename"
send "\r"
expect "*#"
}
-re {\mflash8\M} {
send "copy flash1:c3750-ipservicesk9-mz.122-55.SE7.bin flash8:\r"
expect "Destination filename"
send "\r"
expect "*#"
}
-re {\mflash9\M} {
send "copy flash1:c3750-ipservicesk9-mz.122-55.SE7.bin flash9:\r"
expect "Destination filename"
send "\r"
expect "*#"
}
}
Вот результат работы скрипта, когда я подключаю его к файлу ... Я только фиксирую первый цикл.
send: sending "dir ?\r" to { exp7 }
Gate keeper glob pattern for '\m(flash[1-9])\M' is 'flash?'. Activating booster.
expect: does "\r\n 6 -rwx 28612 Apr 23 2012 02:35:18 +02:00 config.text.backup\r\n 5 -rwx 1276 Mar 1 1993 01:04:41 +01:00 vlan.dat\r\n 4 -rwx 2404 Jun 17 2013 14:01:30 +02:00 private-config.text\r\n 88 -rwx 2404 Apr 23 2012 02:35:18 +02:00 private-config.text.backup\r\n 8 -rwx 43535 Jun 17 2013 14:01:29 +02:00 config.text\r\n\r\n32514048 bytes total (19417088 bytes free)\r\nB3762_6D205C_SW1&2#" (spawn_id exp7) match regular expression "\m(flash[1-9])\M"? Gate "flash?"? gate=no
"*#"? yes
expect: set expect_out(0,string) "\r\n 6 -rwx 28612 Apr 23 2012 02:35:18 +02:00 config.text.backup\r\n 5 -rwx 1276 Mar 1 1993 01:04:41 +01:00 vlan.dat\r\n 4 -rwx 2404 Jun 17 2013 14:01:30 +02:00 private-config.text\r\n 88 -rwx 2404 Apr 23 2012 02:35:18 +02:00 private-config.text.backup\r\n 8 -rwx 43535 Jun 17 2013 14:01:29 +02:00 config.text\r\n\r\n32514048 bytes total (19417088 bytes free)\r\nB3762_6D205C_SW1&2#"
expect: set expect_out(spawn_id) "exp7"
expect: set expect_out(buffer) "\r\n 6 -rwx 28612 Apr 23 2012 02:35:18 +02:00 config.text.backup\r\n 5 -rwx 1276 Mar 1 1993 01:04:41 +01:00 vlan.dat\r\n 4 -rwx 2404 Jun 17 2013 14:01:30 +02:00 private-config.text\r\n 88 -rwx 2404 Apr 23 2012 02:35:18 +02:00 private-config.text.backup\r\n 8 -rwx 43535 Jun 17 2013 14:01:29 +02:00 config.text\r\n\r\n32514048 bytes total (19417088 bytes free)\r\nB3762_6D205C_SW1&2#"
send: sending "copy tftp: flash:\r" to { exp7 }
expect: does "" (spawn_id exp7) match glob pattern "Address or name of remote host ?"? no
d
expect: does "d" (spawn_id exp7) match glob pattern "Address or name of remote host ?"? no
i
expect: does "di" (spawn_id exp7) match glob pattern "Address or name of remote host ?"? no
r
expect: does "dir" (spawn_id exp7) match glob pattern "Address or name of remote host ?"? no
expect: does "dir " (spawn_id exp7) match glob pattern "Address or name of remote host ?"? no
?
expect: does "dir ?" (spawn_id exp7) match glob pattern "Address or name of remote host ?"? no
/all List all files
/recursive List files recursively
all-filesystems List files on all filesystems
bs: Directory or file name
cns: Directory or file name
flash1: Directory or file name
flash2: Directory or file name
flash: Directory or file name
null: Directory or file name
nvram: Directory or file name
system: Directory or file name
tar: Directory or file name
tmpsys: Directory or file name
vb: Directory or file name
xmodem: Directory or file name
ymodem: Directory or file name
<cr>
B3762_6D205C_SW1&2#dir
expect: does "dir ?\r\n /all List all files\r\n /recursive List files recursively\r\n all-filesystems List files on all filesystems\r\n bs: Directory or file name\r\n cns: Directory or file name\r\n flash1: Directory or file name\r\n flash2: Directory or file name\r\n flash: Directory or file name\r\n null: Directory or file name\r\n nvram: Directory or file name\r\n system: Directory or file name\r\n tar: Directory or file name\r\n tmpsys: Directory or file name\r\n vb: Directory or file name\r\n xmodem: Directory or file name\r\n ymodem: Directory or file name\r\n <cr>\r\n\r\nB3762_6D205C_SW1&2#dir " (spawn_id exp7) match glob pattern "Address or name of remote host ?"? no
expect: does "dir ?\r\n /all List all files\r\n /recursive List files recursively\r\n all-filesystems List files on all filesystems\r\n bs: Directory or file name\r\n cns: Directory or file name\r\n flash1: Directory or file name\r\n flash2: Directory or file name\r\n flash: Directory or file name\r\n null: Directory or file name\r\n nvram: Directory or file name\r\n system: Directory or file name\r\n tar: Directory or file name\r\n tmpsys: Directory or file name\r\n vb: Directory or file name\r\n xmodem: Directory or file name\r\n ymodem: Directory or file name\r\n <cr>\r\n\r\nB3762_6D205C_SW1&2#dir \r\n" (spawn_id exp7) match glob pattern "Address or name of remote host ?"? no
Directory of flash:/
2 -rwx 9240 Jun 17 2013 14:01:30 +02:00 multiple-fs
3 -rwx 13006601 Apr 24 2012 19:24:08 +02:00 c3750-ipservicesk9-mz.122-55.SE5.bin
6 -rwx 28612 Apr 23 2012 02:35:18 +02:00 config.text.backup
5 -rwx 1276 Mar 1 1993 01:04:41 +01:00 vlan.dat
4 -rwx 2404 Jun 17 2013 14:01:30 +02:00 private-config.text
88 -rwx 2404 Apr 23 2012 02:35:18 +02:00 private-config.text.backup
8 -rwx 43535 Jun 17 2013 14:01:29 +02:00 config.text
32514048 bytes total (19417088 bytes free)
B3762_6D205C_SW1&2#
expect: does "dir ?\r\n /all List all files\r\n /recursive List files recursively\r\n all-filesystems List files on all filesystems\r\n bs: Directory or file name\r\n cns: Directory or file name\r\n flash1: Directory or file name\r\n flash2: Directory or file name\r\n flash: Directory or file name\r\n null: Directory or file name\r\n nvram: Directory or file name\r\n system: Directory or file name\r\n tar: Directory or file name\r\n tmpsys: Directory or file name\r\n vb: Directory or file name\r\n xmodem: Directory or file name\r\n ymodem: Directory or file name\r\n <cr>\r\n\r\nB3762_6D205C_SW1&2#dir \r\nDirectory of flash:/\r\n\r\n 2 -rwx 9240 Jun 17 2013 14:01:30 +02:00 multiple-fs\r\n 3 -rwx 13006601 Apr 24 2012 19:24:08 +02:00 c3750-ipservicesk9-mz.122-55.SE5.bin\r\n 6 -rwx 28612 Apr 23 2012 02:35:18 +02:00 config.text.backup\r\n 5 -rwx 1276 Mar 1 1993 01:04:41 +01:00 vlan.dat\r\n 4 -rwx 2404 Jun 17 2013 14:01:30 +02:00 private-config.text\r\n 88 -rwx 2404 Apr 23 2012 02:35:18 +02:00 private-config.text.backup\r\n 8 -rwx 43535 Jun 17 2013 14:01:29 +02:00 config.text\r\n\r\n32514048 bytes total (19417088 bytes free)\r\nB3762_6D205C_SW1&2#" (spawn_id exp7) match glob pattern "Address or name of remote host ?"? no
c
Вот пример того, как это будет выглядеть, если я запустил все эти команды вручную.
B3762_6D205C_SW1&2#term length 0
B3762_6D205C_SW1&2#wr
Building configuration...
[OK]
B3762_6D205C_SW1&2#dir flash:
# This first DIR tells me whether or not I have .bin version 5 or version 7. If I have version 7 I exit out of the script and I move on to upgrading another device. If it has version 5 continue on through the script.
Directory of flash:/
3 -rwx 13006601 Apr 24 2012 19:24:08 +02:00 c3750-ipservicesk9-mz.122-55.SE5.bin
6 -rwx 28612 Apr 23 2012 02:35:18 +02:00 config.text.backup
5 -rwx 1276 Mar 1 1993 01:04:41 +01:00 vlan.dat
4 -rwx 9240 Jun 18 2013 07:44:01 +02:00 multiple-fs
7 -rwx 43535 Jun 18 2013 07:44:01 +02:00 config.text
88 -rwx 2404 Apr 23 2012 02:35:18 +02:00 private-config.text.backup
8 -rwx 2404 Jun 18 2013 07:44:01 +02:00 private-config.text
32514048 bytes total (19417088 bytes free)
# This dir tells me how many flash file systems there are. I want to use this output to determine how many flash file systems I have to delete the old version 5 .bin file from.
B3762_6D205C_SW1&2#dir ?
/all List all files
/recursive List files recursively
all-filesystems List files on all filesystems
bs: Directory or file name
cns: Directory or file name
flash1: Directory or file name
flash2: Directory or file name
flash: Directory or file name
null: Directory or file name
nvram: Directory or file name
system: Directory or file name
tar: Directory or file name
tmpsys: Directory or file name
vb: Directory or file name
xmodem: Directory or file name
ymodem: Directory or file name
<cr>
B3762_6D205C_SW1&2#delete /force /recursive flash1:c3750-ipservicesk9-mz.122-55.SE5.bin
B3762_6D205C_SW1&2#delete /force /recursive flash2:c3750-ipservicesk9-mz.122-55.SE5.bin
B3762_6D205C_SW1&2#copy tftp: flash:
Address or name of remote host []? 204.208.204.209
Source filename []? c3750-ipservicesk9-mz.122-55.SE7.bin
Destination filename [c3750-ipservicesk9-mz.122-55.SE7.bin]?
Accessing tftp://204.208.204.209/c3750-ipservicesk9-mz.122-55.SE7.bin...
Loading c3750-ipservicesk9-mz.122-55.SE7.bin from 204.208.204.209 (via Vlan402): !OO!OO!OO!OO!OO!OO!OO!OO!OO!OO!OO!OO!OO!OO!OO!OO!OO!OO!OO!OO!OO!OO!OO!OO!OO!OO!OO!OO!OO!OO!OO!O!OO!OO!OO!OOO!OO!OO!OO!OO!OO!OO!O!OO!OO!OO!OO!OO!OO!OO!OO
[OK - 13010154 bytes]
13010154 bytes copied in 281.312 secs (46248 bytes/sec)
B3762_6D205C_SW1&2#dir ?
# I want to use this "dir ?" to tell me I how many flash file systems I have to copy the new version 7 flash file system to.
/all List all files
/recursive List files recursively
all-filesystems List files on all filesystems
bs: Directory or file name
cns: Directory or file name
flash1: Directory or file name
flash2: Directory or file name
flash: Directory or file name
null: Directory or file name
nvram: Directory or file name
system: Directory or file name
tar: Directory or file name
tmpsys: Directory or file name
vb: Directory or file name
xmodem: Directory or file name
ymodem: Directory or file name
<cr>
B3762_6D205C_SW1&2#copy flash1:c3750-ipservicesk9-mz.122-55.SE7.bin flash2:
Destination filename [c3750-ipservicesk9-mz.122-55.SE7.bin]?
Copy in progress...CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
13010154 bytes copied in 171.731 secs (75759 bytes/sec)
B3762_6D205C_SW1&2#conf t
Enter configuration commands, one per line. End with CNTL/Z.
B3762_6D205C_SW1&2(config)#boot system switch all flash:c3750-ipservicesk9-mz.122-55.SE7.bin
B3762_6D205C_SW1&2(config)#exit
B3762_6D205C_SW1&2#reload at 02:00 22 June
System configuration has been modified. Save? [yes/no]: yes
Building configuration...
[OK]
Reload scheduled for 02:00:00 CEST Sat Jun 22 2013 (in 90 hours and 3 minutes) by super.poop on vty0 (204.208.XXX.XXX)
Proceed with reload? [confirm]
B3762_6D205C_SW1&2#term length 50
B3762_6D205C_SW1&2#wr mem
Building configuration...
[OK]
B3762_6D205C_SW1&2#exit
Это единственный раздел, который не работает прямо сейчас!
set DIR {flash2 flash3 flash4 flash5 flash6 flash7 flash8 flash9}
send "dir ?\r"
expect {
-re {\m(flash[2-9])\M} {
lappend DIR $expect_out(1,string)
exp_continue
}
"*#"
}
foreach X $DIR {
send "copy flash1:c3750-ipservicesk9-mz.122-55.SE7.bin $X:\r"
expect "Destination filename"
send "\r"
expect "*#"
}
поэтому по какой-то причине он выполняет миксер: (flash и flash1 - это тот же каталог, кстати, единственная причина, по которой он пронумерован, - определить, с каким коммутатором вы работаете в стеке). Он не удаляет старый .bin-файл или не копирует новый .bin-файл другим членам стека. – bjforesthowell
добавьте 'exp_internal 1' в начало вашего скрипта. Ожидание покажет вам, что происходит. –
Он просто продолжает повторять "dir?" на самом деле ищет какой-либо из пронумерованных флеш-директорий, то есть flash2, flash3 и т. д. Мне удалось передать вывод из файла exp_internal в файл. Есть ли способ опубликовать его здесь, или я должен просто отредактировать свой оригинальный пост и разместить его там? – bjforesthowell