Expect и условие по результату выполнения команды

Программирование на sh, быть может немного про альтернативные языки
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
densan
ст. сержант
Сообщения: 370
Зарегистрирован: 2007-12-06 10:02:02
Откуда: Penza
Контактная информация:

Expect и условие по результату выполнения команды

Непрочитанное сообщение densan » 2012-03-13 16:57:32

Здравствуйте.
Делаю скрипт по массовой перезагрузке АТС LG LDK 60/100. Запускается sh скрипт, который проверяет доступность АТС по пингу и если пинг есть, запускает expect скрипт с ИП взятым из файла.

Код: Выделить всё

#!/usr/local/bin/expect -f

set remote_server [lindex $argv 0]
set LOG_FILE "/var/log/ats.log"
set date [timestamp -format "%C%y-%m-%d %X"]

if { $remote_server == "" } {
   puts "Usage: <ipaddr> \n"
   exit 1
   }
#Отключаем вывод команд в  stdout, если хотите видеть вывод в консоли отключите это
#log_user 0
# Открываем telnet сессию на АТС
spawn telnet $remote_server

# Ждем строку "Your port number"
expect "Your port number"

# Посылаем Enter и ждем запроса пароля.
send "\r"
expect "ENTER PASSWORD:"

# Посылаем пароль и ждем приглашения ввода командного интерпретатора.
send "jannie\r"
expect "maint>"
# Посылаем команду перезагрузки, и ждем следующего приглашения на ввод пароля,
# который должен предварительно забит в PGM 162, после этого необходима перезагрузка АТС PGM 450/452.
send "reboot\r"
expect "Password:"
send "4410\r"
expect "Retype password:"
send "4410\r"
expect "Now system is rebooting"
send "\r"
Необходимо вставить условие: если АТС успешно пошла на перезагрузку (выведет в консоль "Now system is rebooting") написать в лог информацию об успешной перезагрузке АТС.
Но насколько я понял в expect нет возможности обрабатывать if-then-else с параметрами взятыми из вывода. Подскажите как можно реализовать?

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Termitnik
сержант
Сообщения: 169
Зарегистрирован: 2008-04-05 20:09:45
Откуда: Киев

Re: Expect и условие по результату выполнения команды

Непрочитанное сообщение Termitnik » 2012-03-14 8:38:40

А как вы собираетесь писать в лог?

densan
ст. сержант
Сообщения: 370
Зарегистрирован: 2007-12-06 10:02:02
Откуда: Penza
Контактная информация:

Re: Expect и условие по результату выполнения команды

Непрочитанное сообщение densan » 2012-03-14 9:47:49

например
if "Now system is rebooting"
then
log_file -a $LOG_FILE
send_log "\r\n $date\r\n ATS $remote_server reboot"
else
log_file -a $LOG_FILE
send_log "\r\n $date\r\n ATS $remote_server NOT reboot!!!!"
fi
только как реализовать условие в expect'е?

densan
ст. сержант
Сообщения: 370
Зарегистрирован: 2007-12-06 10:02:02
Откуда: Penza
Контактная информация:

Re: Expect и условие по результату выполнения команды

Непрочитанное сообщение densan » 2012-03-17 12:19:19

В общем решил по другому: вывожу лог работы expect в файл, а потом парсю этот файл на предмет вхождения нужных мне строк и на основании этого формирую лог об успешной или неудачной выполнении команд.