И снова здравствуйте!
Имеется два адсл-модема:
один перезагружается командой wget ip_addr_adsl_modem/reboot.cgi
второй - командой telnet ip_addr_adsl_modem ...
Задача: написать один скрипт перезагрузки обоих модемов.
Задача тривиальная и по отдельности для каждого модема решается просто:script_1.sh
#!/bin/sh
wget 192.168.1.1/reboot.cgiscript_2.sh
#!/usr/bin/expect
spawn telnet 192.168.1.2
expect "Password:"
send "Blah-Blah-Blah\r"
expect "ADSL>"
send "wan adsl reset\r"Опытный админ сразу заметит, что заголовки скриптов несовместимы, т. е. просто объединить их нельзя.
Пробовал в один скрипт вставить другой командой exec:script_1.sh
#!/bin/sh
wget 192.168.1.1/reboot.cgi
exec ./script_2.sh
#another code hereТак все работает за исключением того, что управление из второго скрипта возвращается командной строке, а не первому скрипту, а нам необходимо вернуться в первый скрипт!
Какие будут предложения?
Написать./script_2.sh
вместо
exec ./script_2.sh
>Написать
>
>./script_2.sh
>
>вместо
>
>exec ./script_2.shНе выходит из второго скрипта
>>Написать
>>
>>./script_2.sh
>>
>>вместо
>>
>>exec ./script_2.sh
>
>Не выходит из второго скриптаdaemon script_2.sh?
>Опытный админ сразу заметит, что заголовки скриптов несовместимы, т. е. просто объединить
>их нельзя.можно.
expect <<__EOF
тут команды
__EOF
>>Опытный админ сразу заметит, что заголовки скриптов несовместимы, т. е. просто объединить
>>их нельзя.
>
>можно.
>
>expect <<__EOF
>тут команды
>__EOFА как быть с командой
spawn telnet ?
>[оверквотинг удален]
>>>их нельзя.
>>
>>можно.
>>
>>expect <<__EOF
>>тут команды
>>__EOF
>
>А как быть с командой
>spawn telnet ?в данном случае expect -- это название бинарника. итого получаем:
expect <<__EOF
spawn telnet 192.168.1.2
expect "Password:"
send "Blah-Blah-Blah\r"
expect "ADSL>"
send "wan adsl reset\r"
__EOFвся конструкция называется 'here document'
>[оверквотинг удален]
>
>в данном случае expect -- это название бинарника. итого получаем:
>
>expect <<__EOF
>spawn telnet 192.168.1.2
>expect "Password:"
>send "Blah-Blah-Blah\r"
>expect "ADSL>"
>send "wan adsl reset\r"
>__EOFСпасибо - завтра попробую
>
>вся конструкция называется 'here document'
Сейчас весь скрипт выглядит следующим образом:#!/bin/bash
COUNT = 2
SRV = 2ip.ru
ADSL1 = eth1
ADSL2 = eth2
IP_ADSL1 = 192.168.1.1ping -c $COUNT -I $ADSL1 $SRV > /dev/null
if [ $? -ne 0 ]; then
echo 'BAD'
wget -q --user='user' --password='password' http://$IP_DSL1/rebootinfo.cgi
rm -f rebootinfo.cgi
else
echo "1 - OK"
fiping -c $COUNT -I $ADSL2 $SRV > /dev/null
if [ $? -ne 0 ]; then
echo 'BAD'
./tel2
else
echo "2 - OK"
fi
./tel2#!/bin/bash
expect <<eof
log_user 1
set timeout 3
spawn telnet 192.168.2.1
expect "Password:"
send -- "password\r"
expect "ADSL>"
send "wan adsl reset\r"
send "exit\r"
expect eofsleep 120
done
exit 0Все работает. Спасибо за помощь
>Сейчас весь скрипт выглядит следующим образом:
>
>#!/bin/bash
>.......................
>
>./tel2
>
>#!/bin/bash
>
>expect <<eof
>
>Все работает. Спасибо за помощьи, наконец, можно избавиться от первоначальной проблемы -- разделения файлов :)
так точно