Файл сценария состоит из комментариев, меток, переменных и команд. Строка, которая начинается символом решетки (#), является комментарием. Метка - это строка, содержащая набор символов, завершаемый двоеточием. Метки используются для разделения сценария на отдельные процедуры. Например, раздел сценария, осуществляющий коммутируемое подключение к удаленному узлу, может начинаться с такой метки:

Dial-in:

Переменная служит для хранения значений. Имя переменной - это строка, которая начинается символом доллара ($). Можно, например, создать переменную для хранения счетчика цикла и дать ей имя $loopcntr. Возможность создания пользовательских переменных применяется редко. В большинстве сценариев используются специальные переменные dip. Специальные переменные и их значения приведены в табл. А.1. Таблица А.1. Специальные переменные dip

Переменпая Хранимое значение
Serrlvl Код завершения последней выполненной команды
Slocip IP-адрес локального узла
Slocal Полное доменное имя локального узла
Srmtip IP-адрес удаленного узла
$ remote Полное доменное имя удаленного узла
$mtu Значение MTU в байтах
Smodem Тип модема; в настоящее время только HAYES
Sport Имя последовательного устройства, например сиаО
$speed Скорость передачи порта

Последний элемент файла сценария - перечень команд. Команд в языке сценариев довольно много, и поскольку настоящее приложение является справочным, мы рассмотрим их все. При этом в большинстве сценариев используется лишь ограниченное подмножество команд. Примеры рабочих сценариев dip приведены в главе би в конце данного раздела. Команды, доступные в dip:

beep [л] - Указывает системе уведомить пользователя звуковым сигналом. Повторить п раз.

bootp - Предписывает системе использовать протокол ВООТР для получения локального и удаленного IP-адреса. Команда применима только к протоколу SLIP. В РРР существует специальный протокол для присвоения адресов.


В SLIP дела обстоят иначе. Как правило, адреса SLIP статически назначаются в теле сценария. Однако в некоторых серверах, использующих SLIP, появились механизмы динамического присвоения адресов. Чаще всего сервер отображает адрес в виде открытого текста сразу после того, как установлено соединение. Для получения адреса от SLIP-сервера такого типа воспользуйтесь командой get $locip remote. Другие типы SLIP-серверов требуют выполнения определенных команд для отображения адреса. Используйте необходимую команду в сценарии, а затем выполните команду get. Наконец, в некоторых SLIP-серверах для распределения адресов применяется протокол ВООТР. Используйте команду bootp в сценарии, чтобы включить работу с ВООТР, если того требует SLIP-сервер.

break - Посылает символ BREAK, который некоторые из серверов интерпретиру- ют в качестве символа внимания.

chatkey keyword code - Связывает ответ модема (ключевое слово keyword) с числовым кодом {code).

Предопределенные коды:

  • 0 ОК
  • 1 CONNEC T
  • 2 ERROR
  • 3 BUS Y
  • 4 NO CARRIER
  • 5 NO DIAL TON E

config [interface|routing] [pre|up(down|post] arguments... - Изменяет свойства интерфейса (interface) или таблицу маршрутизации (routing) до того, как создано соединение (pre), когда создано соединение (up), при разрыве соединения (down) либо после закрытия соединения (post). Следующая команда:

config up routing add canary gw ibis

добавляет маршрут к canary через шлюз ibis, если существует соединение. Изменение таблицы маршрутизации или свойств интерфейса обычными пользователями представляет серьезную опасность. Команда config отключена в коде dip, для ее применения требуется повторная компиляция пакета.

databits 7|8 - Устанавливает число битов данных в 7 или 8. Для каналов РРР и SLIP рекомендуется значение 8.

dec $variable [value] - Уменьшает значение переменной $variable на число value. По умолчанию число value равно 1.

default - Предписывает использовать соединение РРР в качестве маршрута по умолчанию.


dial phonenumber [timeout] - Набирает номер phonenumber. Если удаленный модем не ответил в течение timeout секунд, соединение разрывается. Serrlvl получает численное значение, основанное на ключевом слове, возвращаемом локальным модемом. Отображение ключевых слов в коды устанавливается посредством команды chatkey.

echo on[off] - Включает или отключает отображение команд модема. exit [/?]

Завершает работу сценария; необязательное значение п является кодом завершения. Очищает буфер ввода.

get Svariable [ask | remote [timeout]] value - Присваивает переменной $variable значение value, если не указаны параметры ask или remote. В случае параметра ask значение переменной запрашивается у пользователя. Параметр remote предписывает получить значение от удаленного компьютера; необязательный параметр timeout определяет число секунд ожидания ответа удаленной системы.

goto label - Предписывает выполнить переход к разделу сценария, отмеченному метко й label.

help - Перечисляет команды, доступные в сценариях dip.

if expr goto label - Условный оператор, осуществляющий переход к разделу сценария, отмеченному меткой label, если выражение ехрг истинно. Выражение должно содержать сравнение значения переменной с константой посредством одного из операторов: == (равенство), ! = (неравенство), < (меньше), > (больше), <= (меньше либо равно), >= (больше либо равно).

inc $variable [value] - Увеличивает значение переменной $variable на число value. По умолчанию число value равно 1.

init command - Определяет строку команд инициализации модема. По умолчанию - АТЕ О Q0V1 Х1.

mode SLIP|CSLIP|РРР[TERM - Указывает последовательный протокол. По умолчанию установлен режим SLIP, поэтому необходимо выполнить команду с аргументом РРР

modem type - Указывает тип модема. Про данную команду можно смело забыть: единственное допустимое значение (HAYES) является значением по умолчанию.

netmask mask - Устанавливает адресную маску.


parity Еj01N - Устанавливает контроль четности в значения even (Е) - четный, odd (0) - нечетный или no (N). Для каналов SLIP и РРР рекомендуется значение N, то есть отсутствие контроля четности.

password - Запрашивает у пользователя пароль.

proxyarp - Создает в таблице ARP локального узла запись для удаленной системы.

print $variable - Отображает значение переменной $variable. psend command Выполняет команду command в сеансе интерпретатора команд по умолчанию и направляет ее вывод на последовательное устройство. Команда выполняется с действительным идентификатором пользователя (UID).

port device - Указывает последовательное устройство, такое как сиаО, с которым связан модем.

quit - Завершает работу сценария с ненулевым кодом, разрывая соединение.

reset - Выполняет инициализацию модема.

send string - Передает строку string на последовательное устройство.

shell command - Выполняет команду cpmmand в сеансе интерпретатора команд по умолчанию. Команда выполняется с действительным идентификатором пользователя (UID).

skey [timeout] - В течение timeout секунд ожидает S/Key-запрос от удаленного терминального сервера, предлагает пользователю ввести секретный ключ, генерирует и передает ответ. Если интервал ожидания истек, Serrlvl получает значение 1; в противном случае - значение 0. Поддержка S/Key должна быть включена при компиляции dip.

sleep time - Задержка выполнения сценария на time секунд, speed bits-per-second Устанавливает скорость порта. По умолчанию - 38400.

stopbits 1|2 - Устанавливает число стоп-битов (1 или 2). Включает режим терминала. В режиме терминала клавиатурный ввод передается прямо на последовательное устройство.

timeout time - Устанавливает интервал бездействия на линии (в секундах), по истечении которого происходит разрыв связи.

wait text [timeout] - Предписывает ожидать получения от удаленной системы текста text в течение timeout секунд. Если время не указано, ожидание длится бесконечно. В следующем разделе мы применим некоторые из описанных команд для создания рабочего сценария.