BASH Programming - Введение


Что означает скрипт chat...


Скрипт chat - последовательность пар "ожидаемая строка" "посылаемая строка". В частности обратите внимание, что мы ВСЕГДА ожидаем что-нибудь перед тем, как пошлем что-либо.

Если мы должны послать что-то БЕЗ того, чтобы сначала получить что-нибудь, мы должны использовать пустую строку ожидания (обозначаемую "") и аналогично для ожидания чего-либо без того, чтобы посылания чего-нибудь! Также, если строка состоит из нескольких слов, (например, NO CARRIER), вы должны взять строку в кавычки, чтобы chat вопринял ее как одно целое.

Строка chat в нашем шаблоне:

______________________________________________________________________

exec /usr/sbin/chat -v ______________________________________________________________________

В вызове chat опция -v говорит, чтобы chat копировал ВЕСЬ ввод/вывод в систеный лог (обычно /var/log/messages). Как только вы убедитесь, что скрипт chat работает надежно, отредактируйте эту строку, чтобы удалить -v, чтобы не хранить ненужную информацию в вашем syslog.

______________________________________________________________________

TIMEOUT 3 ______________________________________________________________________

Это устанавливает паузу для получения ожидаемого ввода в 3 секунды. Вы можете увеличить это значение до 5 или 10 секунд, если вы используете медленный модем!

______________________________________________________________________

ABORT '\nBUSY\r' ______________________________________________________________________

Если получена строка BUSY, то операция аварийно прекращается.

______________________________________________________________________

ABORT '\nNO ANSWER\r' ______________________________________________________________________

Если получена строка NO ANSWER, то операция аварийно прекращается.



______________________________________________________________________

ABORT '\nRINGING\r\n\r\nRINGING\r' ______________________________________________________________________

Если (повторимся) получена строка RINGING, то операция аварийно прекращается.

Это потому, что кто-то сидит на вашей телефонной линии!


______________________________________________________________________

" \rAT ______________________________________________________________________

Не ожидаем ничего от модема, и послаем строку в него.

______________________________________________________________________

OK-+++\c-OK ATH0 ______________________________________________________________________

Это немного более сложно, поскольку использует некоторые из возможностей восстановления при ошибках chat.

What is says is...Ожидаем OK, если он не получен (потому что модем не в командном режиме), затем посылаем +++ (стандартная строка для Hayes-совместимых модемов, которая возвращает модем в командный режим) и ожидаем OK.

Затем посылаем ATH0 (строка для завершения связи модема). Это позволяет вашему скрипту справляться с вашим модемом, зависшим во время сеанса связи!

______________________________________________________________________

TIMEOUT 30 ______________________________________________________________________

Установим паузу по времени в 30 секунд для оставшихся команд скрипта. Если вы испытываете проблемы со скриптом chat, прерывающимся из-за пауз, увеличьте это значение до 45 секунд или больше.

______________________________________________________________________

OK ATDT$TELEPHONE ______________________________________________________________________

Ожидаем OK (ответ модема на команду ATH0) и набираем номер, на который мы хотим позвонить.

______________________________________________________________________

CONNECT '' ______________________________________________________________________

Дожидаемся строки CONNECT (которую наш модем посылает, когда удаленные модем отвечает) и не посылаем в ответ ничего.

______________________________________________________________________

ogin:--ogin: $ACCOUNT ______________________________________________________________________

Снова, здесь мы вставляем кое-какое исправление ошибок. Ожидаем подсказку входа в систему (... ogin:), но если мы не получаем ее по истечении паузы, то посылаем возврат каретки и затем ищем подсказку входа в систему снова. Когда подсказка получена, посылаем username (сохраненное в переменной shell $ACCOUNT).

______________________________________________________________________

assword: $PASSWORD ______________________________________________________________________

Ожидаем запроса пароля и посылаем наш пароль (аналогично сохраненный в переменной shell).

Этот скрипт chat имеет приемлемую возможность исправления ошибок. chat имеет значительно большее количество возможностей, чем показано здесь. Для подробной информации проконсультируйтесь с man chat (man 8 chat).


Содержание раздела