Приемы профессиональной работы в UNIX



         

Глава 05_2 - часть 4


[0-9][0-9][0-9] statement;;

Я использовал оператор expr для того, чтобы показать, каким образом expr может быть использован для выполнения такого рода проверки.

Любой другой ввод перехватывается в строке 28 путем проверки на совпадение с универсальным символом-заменителем *. Выводится сообщение об ошибке, и оператор continue вызывает следующую итерацию цикла while, который запрашивает новый ввод.

Обратите внимание, как shell рассматривает строки. Команда test фактически выполняет сравнение значения строки. Несмотря на то, что команде test(1) посвящена своя страница справочного руководства, она является встроенной функцией shell. Если при вызове команды test использован синтаксис =, !=, то два аргумента рассматриваются как строки. Но если в команде test используется синтаксис вида -lt, -eq, то производится сравнение двух аргументов-строк как чисел и выполняется их числовая обработка. Эти два различных режима нельзя смешивать, т.е. нельзя сравнивать строки при помощи числового оператора, например str1 -eq str2.

В строках 32-34 каждая цифра вырезается из числа и помещается в свою собственную переменную. Затем эти переменные используются в качестве индекса в операторе case, который содержит магические слова.

Строка 35 инициализирует переменную SEN для сбора предложения. (Предварительное замечание перед тем, как мы начнем получать письма от ревнителей чистоты грамматики - да, мы знаем, что то, что мы генерируем, является фразой, а не настоящим предложением, поскольку отсутствует глагол.) Начинаем мы с пустого предложения и добавляем к нему каждый раз по одному слову.

Строки 37-48 представляют собой первый оператор case. Оператор case берет значение переменной N1 и добавляет слово с таким номером к предложению. На самом деле нет необходимости включать значение переменной SEN в правую часть присваивания, поскольку еще ничего нет. Однако это делает текст программы более гибким, если мы решим предварительно сгенерировать первоначальное предложение некоторыми другими средствами. Аналогичные операторы case обрабатывают две следующие цифры.

Полученное предложение выводится в строке 76 после того, как найдены все слова. Вы могли бы сказать, что вся эта штука представляет собой 754 подвиг, или Synchronized Logistical Programming (Синхронизированное логическое программирование).

МОДИФИКАЦИИ




Содержание  Назад  Вперед