Главная · Поиск книг · Поступления книг · Top 40 · Форумы · Ссылки · Читатели

Настройка текста
Перенос строк


    Прохождения игр    
Demon's Souls |#4| Adjudicator & Tower Knight
Demon's Souls |#3| Cave & Armor Spider
Demon's Souls |#2| First Boss
SCP-077: Rot skull

Другие игры...


liveinternet.ru: показано число просмотров за 24 часа, посетителей за 24 часа и за сегодня
Rambler's Top100
Образование - Сэйдж Рас Весь текст 822.4 Kb

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

Предыдущая страница Следующая страница
1 ... 35 36 37 38 39 40 41  42 43 44 45 46 47 48 ... 71
|
|    Enter a 3 digit number (000-999), ?, or : ?
|
|    0. Integrated        0. Management       0. Options
|    1. Total             1. Organizational   1. Flexibility
|    2. Systematized      2. Monitored        2. Capability
|    3. Parallel          3. Reciprocal       3. Mobility
|    4. Functional        4. Digital          4. Programming
|    5. Responsive        5. Logistical       5. Concept
|    6. Optional          6. Transitional     6. Time-Phase
|    7. Synchronized      7. Incremental      7. Projection
|    8. Compatible        8. Operational      8. Hardware
|    9. Balanced          9. Third-Generation 9. Contingency
|

     Имеется три возможных варианта ввода.  Вы можете ввести трехзнач-
ное число, знак вопроса для печати таблицы или возврат каретки для вы-
хода  из программы.  Проверяется,  является ли строка из трех цифр до-
пустимым числом. Если все в порядке, то введенное число разбивается на
три составляющие его цифры.  Каждая цифра используется как ключ поиска
в массиве из десяти слов для получения куска  предложения.  Затем  все
слова  объединяются для формирования жаргонной фразы.  После этого вам
выдается запрос на дальнейший ввод.
     Если вы ввели знак вопроса, печатается таблица слов, как показано
в предыдущем примере,  и вам снова выдается запрос.  Если  был  введен
только возврат каретки, то цикл, выдававший запросы, завершается и за-
канчивается выполнение программы.
     Внутри самой  программы  выполняется  только  проверка на ошибки.
Программа jargon организована аналогично программе,  управляемой с по-
мощью меню,  однако никакого меню нет. Это просто цикл, который выпол-
няется до тех пор, пока не будет нажат возврат каретки.

     ПРИМЕРЫ

1.  $ jargon
    898

     Открывается секрет,  что у меня персональный  компьютер  898,  то
есть  Compatible  Third-Generation  Hardware  (совместимая  аппаратура
третьего поколения).

2.  $ jargon
    187

     Оказывается это  Total Operational Projection (всеобъемлющий раз-
рабатываемый проект).

     ПОЯСНЕНИЯ

     Строка 4  печатает  заголовок  при  начальном  запуске программы.
Отображается возврат каретки, две табуляции и сообщение.
     Строки 5-77  представляют  собой  один  большой  бесконечный цикл
while.  В нем имеется всего одна точка выхода, находящаяся внутри опе-
ратора case.  Строка 7 выводит приглашение, а строка 8 читает вводимый
ответ в переменную NUM.
     Строки 10-30 являются оператором case, который проверяет информа-
цию,  введенную с клавиатуры.  Если был введен только возврат каретки,
строка  11 рассматривает это как нулевой ввод.  В этом случае выполня-
ется выход из программы. Это и есть нормальная точка выхода.
     Ввод вопросительного знака соответствует строке 12. Обратите вни-
мание, что знак вопроса экранирован. Это выполнено по той причине, что
символ  ?  имеет  для shell специальное значение.  Он используется как
представитель любого одиночного символа при  порождении  имени  файла.
Для того, чтобы сделать знак вопроса обычным символом, мы должны экра-
нировать его для отмены специального значения.
     В строках  12-24 команда cat получает текст из последующего фраг-
мента самой программы.  Такого рода файл иногда  называют  "встроенным
документом".  Возможность обработки встроенного документа активируется
последовательностью символов <<.  Слово, которое следует за ней, явля-
ется признаком начала-окончания,  в данном случае EOF. После того, как
текст будет выведен на экран,  строка 25 продолжает выполнение следую-
щей итерации внешнего цикла while.
     Попутно отметим:  для того,  чтобы увидеть,  как shell  управляет
встроенными  документамм,  посмотрите во время работы командного файла
каталог /tmp. В нем находится файл с именем "shXXXX", где XXXX - иден-
тификатор shell,  создавшего этот файл. Весь встроенный документ цели-
ком помещается в этот временный файл.  Затем shell  выполняет  переад-
ресацию своего входа на этот временный файл. Довольно простой метод.
     Строка 26 соответствует всем случаям  ввода,  когда  имеется  три
символа.  Эти  символы могут быть буквами и/или цифрами.  В этом месте
shell еще не знает, есть ли там буквы. Для проверки того, что все вве-
денные символы являются цифрами,  мы должны использовать команду expr,
выполняющую дополнительный анализ.  Оператор expr указывает, что нужно
сравнить строку NUM с последовательностью "начало строки,  цифра, циф-
ра,  цифра, конец строки". Если сопоставление успешно, expr возвращает
статус  успешного  возврата  и  программа идет дальше.  Поскольку expr
возвращает число совпавших символов,  этот результат должен быть пере-
направлен в каталог /dev/null.
     Если сравнение завершилось неудачей,  активизируется оператор  ||
(мы уже видели такого рода управляющую структуру ранее), который печа-
тает сообщение об ошибке и вызывает следующую  итерацию  цикла  while.
Такой  синтаксис  представляет  собой  то  же  самое,  что  и оператор
if-then-else. Поскольку за символами || может следовать список команд,
то  внутрь  простых  разделителей списка {} можно вставить более одной
команды.  Будьте внимательны. Если отсутствуют символы-разделители, то
оператор continue выполнится как после сообщения об ошибке,  ТАК И при
успешном выполнении команды expr.  Это может заставить вас  заниматься
отладкой, пока вы не обнаружите, что же произошло на самом деле.
     Точно такую же проверку числа можно было бы выполнить  с  помощью
оператора case.  Синтаксис был бы таким же,  за исключением зацепочных
символов ^ и $. Шаблон для оператора case выглядел бы так:

[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 (Синхронизи-
рованное логическое программирование).

     МОДИФИКАЦИИ

     Можно немного поиграться с этой программой.  Вы могли бы получать
случайное число,  зависящее от текущего системного времени  (используя
извлечение  и команду expr) и основывать поиск на этом числе,  а не на
числе,  введенном пользователем. Вы также могли бы использовать каждую
цифру случайного числа для управления выбором слова из различных баз с
жаргонными терминами,  имея,  возможно,  по одному файлу для каждой из
трех  позиций  слова и организуя цикл на случайное значение для чтения
каждого слова.  Слова могли бы читаться и удаляться из  файла  до  тех
пор, пока не прочитается слово, которое соответствует случайной цифре.
Имеется множество других возможностей.  Если вы вовремя  не  останови-
тесь, то обнаружите, что вы написали компьютерную игру!

---------------------------------------------------------------------------

     ИМЯ:  phone
---------------------------------------------------------------------------

phone    База данных с телефонными номерами

     НАЗНАЧЕНИЕ

     Управляемое меню средство,  поддерживающее базу данных с телефон-
     ными номерами

     ФОРМАТ ВЫЗОВА

phone

     ПРИМЕР ВЫЗОВА

phone     Вызов телефонной базы данных
s         Ввод опции поиска
russ      Поиск номера телефона Расса

     ТЕКСТ ПРОГРАММЫ phone

1   :
2   # @(#) phone v1.0 Maintain telephone database
Author: Russ Sage
2а                      Сопровождение телефонной базы данных

4   if [ $# -gt 0 ]
5     then  echo "phone: argument error" >&2
6           echo "usage: phone"          >&2
7           exit 1
8   fi

10  BASE="$HOME/.phone.list"

12  while :
13  do
14         echo "

16  phonebase = $BASE

18        PHONE MENU
19        ----------
20    add name to list
21    delete name from list
22    edit list
23    search for name in list
24    view complete list
25     - exit program

27  Press a,d,e,s,v or : \c"
28  read RSP

30          case $RSP in
31          "")     exit 0
32                  ;;
33          a|A)    echo "\nEnter name to add ( to exit
): \c"
34                  read NAME
35                  if [ "$NAME" = "" ]
36                    then continue
37                  fi
38                  echo "Enter description of person: \c"
39                  read DESC
40                  echo "Enter number to add: \c"
41                  read NUM
42                  echo "$NAME\t$DESC\t\t\t$NUM" >> $BASE
43                  sort -t" " +1 -1.3b -o $BASE $BASE
44                  ;;
45          d|D)    echo "\nEnter name to delete ( to exit
): \c"
46                  read NAME
47                  if [ "$NAME" = "" ]
48                    then continue
49                  fi
50                  sed -e "/$NAME/d" $BASE.new
51                  mv $BASE.new $BASE
52                  ;;
53          e|E)    vi $BASE
54                  ;;
55          s|S)    echo "\nEnter name to search: \c"
56                  read NAME
57                  echo "\n----------------------------------"
58                  grep -y "$NAME" $BASE
59                  echo "------------------------------------"
60                  ;;
61          v|V)    echo "\n\tPhone List\n\t---------" &
62                  more $BASE
63                  echo "\nhit \c"
64                  read RSP
65                  ;;
66          *)      echo "Not a valid command"
67                  ;;
68          esac
69  done

     ПЕРЕМЕННЫЕ СРЕДЫ ВЫПОЛНЕНИЯ

BASE      Фактическое имя файла телефонной базы данных
DESC      Описание, вводимое в базу данных
NAME      Имя, вводимое в базу данных
NUM       Номер телефона, вводимый в базу данных
RSP       Ответ пользователя на приглашение

       ОПИСАНИЕ

     ЗАЧЕМ НАМ НУЖЕН phone?

     Телефоны представляют собой очень важную  часть  нашего  рабочего
Предыдущая страница Следующая страница
1 ... 35 36 37 38 39 40 41  42 43 44 45 46 47 48 ... 71
Ваша оценка:
Комментарий:
  Подпись:
(Чтобы комментарии всегда подписывались Вашим именем, можете зарегистрироваться в Клубе читателей)
  Сайт:
 
Комментарии (52)

Реклама