Это -- второй из скриптов, который устанавливает PPP-соединение.
Cкрипт диалога (chat script) обычно целиком помещается
на одной строке. Обратные слэши (символы "\
") используются для того,
чтобы объединить несколько коротких строк, которые можно выводить сразу на
экран, так что командная оболочка будет воспринимать их как одну очень длинную строку.
Таким образом, эти символы не являются частью скрипта.
Будет полезно, тем не менее, познакомиться с текстом этого скрипта и понять, что он должен делать.
Скрипт диалога (chat script) является последовательностью пар 'строка ожидания'-'посылаемая строка' ('expect string'-'send string'). Заметим, что любой посылке всегда предшествует ожидание некоторого сигнала. Если некая строка посылается без предварительного ожидания прихода какого-либо сигнала (или наоборот), то надо использовать пустую строку ожидания (или посылаемую строку), обозначаемую как "". Кавычки должны обрамлять сообщение и в том случае, когда оно состоит из нескольких слов (пример: сообщение 'NO CARRIER'), так что скрипт воспринимает это как единую строку.
В приведенном примере диалоговая строка выглядит так:
exec /usr/sbin/chat -vПри вызове диалогового скрипта использована опция -v, указывающая, что все сообщения ввода и вывода будут сохраняться в системном протоколе (обычно это файл /var/log/messages). После того, как этот скрипт показал свою работоспособность, эту опцию можно убрать, сократив тем самым объем информации в системных протоколах.
Следующая строка
TIMEOUT 3устанавливает время ожидания для прихода ожидаемых строк, равное трем секундам. Для очень медленного модема это время можно увеличить до 5 или 10 секунд.
Строка
ABORT '\nBUSY\r'говорит, что при приходе строки 'BUSY' надо прервать работу.
Аналогично нужно поступить, если придет строка 'NO ANSWER':
ABORT '\nNO ANSWER\r'или строка 'RINGING':
ABORT '\nRINGING\r\n\r\nRINGING\r'(так как кто-то звонит по телефону клиента).
Посылаем модему строку 'AT'; в ответ ничего не ожидается:
'' \rAT
В следующей строке
OK-+++\c-OK ATH0использованы некоторые возможности восстановления после сообщений об ошибке. Здесь от модема ожидается строка 'OK'; если она не пришла (из-за того, что модем не находится в командном режиме), то посылается строка '+++' (эта строка возвращает стандартный Hayes-совместимый модем в командный режим) и ожидается 'OK', а затем посылается команда ATH0. Эта команда позволяет скрипту справляться с ситуацией, когда модем "завис" в режиме on-line.
Следующая строка
TIMEOUT 30устанавливает время ожидания, равное 30 секундам, на весь остаток скрипта. Если это время окажется недостаточным, его можно увеличить до 45 секунд и более.
Строка набора номера
OK ATDP$TELEPHONEожидает 'OK' от модема в ответ на команду ATH0, и набирает требуемый номер.
Дальше ждем сообщения 'CONNECT':
CONNECT ''Наш модем также посылает 'CONNECT', когда отвечает удаленный модем.
Теперь надо войти в систему.
ogin:--ogin: $ACCOUNTВ эту команду встроен механизм, который, когда время ожидания будет исчерпано, а приглашение войти в систему (...ogin:) получено не будет, посылает пустую строку и еще раз ждет приглашения. Когда приглашение получено, то посылается имя пользователя, которое хранится в переменной командной оболочки по имени $ACCOUNT.
Теперь ожидается приглашение ввести пароль:
assword: $PASSWORDи он вводится.
В данном скрипте предусмотрены возможности возникновения различных ошибок. Однако программа chat имеет гораздо больше возможностей, чем здесь продемонстрировано. Более полную информацию можно получить из экранной документации (man 8 chat).