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

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


    Прохождения игр    
Demon's Souls |#15| Dragon God
Demon's Souls |#14| Flamelurker
Demon's Souls |#13| Storm King
Demon's Souls |#12| Old Monk & Old Hero

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


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

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

Предыдущая страница Следующая страница
1 ... 19 20 21 22 23 24 25  26 27 28 29 30 31 32 ... 71
90           f|F)   cpio -icBt < $DEV
91                  echo "\nhit \c"
92                  read CMD
93                  ;;
94           l|L)   cpio -icBtv < $DEV
95                  echo "\nhit \c"
96                  read CMD
97                  ;;
98           *)     echo "cpiobr: invalid command \"$CMD\""
99                  ;;
100          esac
101 done

            Переменные среды выполнения

        ABORT       Флаг, определяющий, делать ли аварийное прекращение
        CMD         Команда, получаемая от пользователя
        DEST        Каталог-приемник при восстановлении
        DEV         Маршрутное имя устройства носителя
        MEDIA       Хранит тип устройства, которое будет использоваться
        SRC         Каталог-источник при копировании

            Описание
            Зачем нам нужен cpiobr?

            Мы уже получили представление об удобстве и управлении копировани-
       ем с помощью команды autobkp,  но мы еще не имели дела с неструктуриро-
       ванными устройствами.  Это такие устройства, которые не содержат файло-
       вую систему,  а просто имеют данные, которые записаны на них в виде по-
       тока  данных.  В  таком  качестве используются магнитные ленты и иногда
       гибкие диски. Как указывалось ранее, у вас может отсутствовать дисковое
       пространство  или  размещенная в другом месте система для копирования в
       формате файловой системы.  Вместо этого вам может потребоваться исполь-
       зовать комплект гибких дисков или магнитную ленту. Даже если у вас име-
       ются другие возможности для копирования,  может наступить время,  когда
       копия на магнитной ленте или гибких дисках может быть оправдана как до-
       полнительная мера предосторожности,  поскольку впоследствии  вы  можете
       восстановить ленту или гибкие диски в другом месте.
            Проблема заключается в том,  что имеется широкий набор версий син-
       таксиса команды cpio для такого копирования, которые зависят от формата
       и используемого устройства.  Если вы переключаете устройства, вы должны
       запомнить (или должны посмотреть) соответствующий синтаксис.  Одним  из
       решений  является  прямое  указание  различных  вариаций команды cpio в
       тексте программы и вызов их в ответ на меню,  которое просто спрашивает
       пользователя,  какого  типа  носитель должен быть использован.  Это наш
       подход при написании cpiobr.  Другое преимущество системы меню заключа-
       ется  в  том,  что вы можете приспособить рутинную работу по выполнению
       такого рода копирования для неопытного оператора или канцелярского  ра-
       ботника, которым требуется знать только лишь, как монтировать магнитную
       ленту или другой носитель и отвечать на вопросы меню.

            Что делает cpiobr?

            Cpiobr -  это управляемая с помощью меню интерактивная утилита ко-
       пирования и восстановления. На самом деле это интерфейс с командой cpio
       системы UNIX.  Функции, предоставляемые меню, включают копирование фай-
       лов с жесткого диска на гибкий диск,  восстановление файлов  с  гибкого
       диска  на жесткий диск,  выдачу списка имен файлов,  хранимых на гибком
       диске и выдачу списка файлов с необязательной дополнительной информаци-
       ей  (подобно  ls -l).  Гибкий диск здесь является первичным устройством
       назначения,  но могут использоваться и другие носители,  такие как маг-
       нитная лента большой емкости или кассетная магнитная лента (streamer).
            После выбора типа операции,  которая должна быть выполнена,  нужно
       выбрать тип используемого устройства. Утилита Cpiobr может быть исполь-
       зована на устройствах системы UNIX фирмы AT&T (/dev/fp021), устройствах
       системы  XENIX  фирмы IBM (/dev/fd0),  стримерной ленте (/dev/rmt0) или
       любом другом устройстве по вашему желанию (/dev/???).  Обычно имя  уст-
       ройства  определяет  тип используемого носителя.  Поскольку эта утилита
       предназначена  для  всех  машин  UNIX,  некоторые  из  вариантов  могут
       отсутствовать  в вашей машине,  поэтому вы имеете право выбрать любое имя
       устройства, которое вам необходимо.
            Как только имя устройства выбрано и,  если вы выполняете копирова-
       ние или восстановление,  вам  задается  вопрос,  что  является  катало-
       гом-источником или каталогом-приемником. Укажите имена каталогов, начи-
       ная с вашего текущего каталога или абсолютное  полное  имя,  начиная  с
       корня (/.),  после чего cpiobr переходит в этот каталог и затем исполь-
       зует относительные полные имена с этого места.  Тем  самым  исключаются
       любые проблемы,  связанные с тем,  что абсолютное полное имя становится
       частью самой копии. Если вы даете относительное полное имя, убедитесь в
       том, что оно начинается от вашего текущего каталога, чтобы cpiobr начал
       работать с нужного места в дереве файлов.
            Когда файлы копируются на желаемый носитель, маршрутное имя, пере-
       данное cpio,  начинается с "/.".  Это означает,  что никакого  префикса
       имени  каталога на гибком диске нет.  Поэтому при восстановлении файлов
       обязательно нужно дать полное маршрутное имя.  Все файлы, поступающие с
       гибкого диска, будут помещены прямо в каталог-приемник, который вы ука-
       зали cpiobr.
            Примеры
            (Здесь приводятся ответы на запросы главного меню,  подменю и  до-
       полнительная информация, появляющиеся в таком порядке.)
        1.  b
            x
            $HOME
            Копирует файлы на гибкий диск системы XENIX, начиная
            с каталога $HOME.
        2.  r
            a
            /dev/rmt0
            $HOME
            Восстанавливает файлы с устройства, выбранного  мной
            (/dev/rmt0, магнитная лента), и помещает файлы в мой
            регистрационный каталог.
        3.  l
            s
            Выдает в  широком    формате    информацию  обо всех
            файлах, размещенных  на гибких  дисках системы  UNIX
            машины типа PC.

        Пояснения

            В строках 4-7 производится проверка на наличие ошибок условий  вы-
       полнения. Единственная ошибка условий выполнения - это когда вы указали
       какие-либо аргументы cpiobr.  Поскольку это управляемая с помощью  меню
       утилита, никаких аргументов передавать не нужно.
            Для того, чтобы получить общее представление о том, как эта утили-
       та работает,  давайте подумаем над тем, что необходимо сделать. Во-пер-
       вых,  мы должны определить, какое действие должно быть выполнено. Полу-
       чив  эту  информацию,  нам  необходимо узнать,  какое устройство должно
       использоваться. Что, если пользователь введет неверный выбор? Нам необ-
       ходимо  ожидать  в  цикле до тех пор,  пока не будет введено правильное
       значение.
            После получения этих двух порций информации, нам нужно определить,
       где искать или куда помещать файлы.  После  этого  мы  можем  выполнять
       cpio.
            Для выполнения этого сценария нам нужно всего два цикла: по одному
       для  каждой стадии ввода.  В данном случае мы используем два цикла типа
       "вечный цикл while". Для выхода из циклов мы используем команду команд-
       ного процессора break,  которая выводит нас из текущего цикла.  Немного
       позже мы увидим наличие проблемы при таком подходе.
            Основной, самый  внешний управляющий цикл начинается со строки 6 и
       заканчивается в последней строке программы -  строке  87.  Целью  этого
       внешнего цикла является управление выполнением программы в целом, полу-
       чение опций меню от пользователя и окончательный выход, когда пользова-
       тель сообщает,  что он закончил работу.  Конечно, вы можете по-прежнему
       выйти из программы при помощи обычного символа прерывания, но само меню
       имеет ключ выхода (CR). Гораздо лучше представлять явный ключ, особенно
       для неопытных пользователей.
            Начиная со  строки  11,  мы устанавливаем экран для главного меню.
       Командой здесь является "c", что будет пояснено позже в этой книге. Она
       соответствует "очистке экрана" и может быть заменена стандартной коман-
       дой очистки системы UNIX,  которую вы можете использовать в этом месте,
       если хотите.
            Строка 12 устанавливает в позиционные  параметры  выходные  данные
       команды  date  системы UNIX.  Такой синтаксис достаточно редко встреча-
       ется,  но тем не менее очень полезен.  Если бы мы не хотели делать  это
       таким образом, мы бы должны были перехватить все выходные данные коман-
       ды date в одной переменной,  затем разделить их на мелкие порции и  по-
       местить каждую порцию в отдельную переменную. Это потребовало бы намно-
       го больше команд и переменных в программе.  Используя наш синтаксис, мы
       заставляем  первый позиционный параметр быть первым полем выходных дан-
       ных команды date,  второй позиционный параметр быть вторым полем и  так
       далее.  Для  получения любого указанного поля мы используем запись вида
       $n, где n есть номер позиционного параметра.
            Строки 13-25  - это один огромный оператор echo,  который печатает
       главное меню.  Выдача всего необходимого одним оператором echo предпоч-
       тительнее,  поскольку  это  минимизирует накладные расходы,  с которыми
       приходится сталкиваться при выполнении большого числа операторов. Такой
       путь  быстрее.  Если бы мы использовали оператор echo для каждой строки
       главного меню, то оно печаталось бы очень медленно и прерывисто. Коман-
       да  UNIX cat также могла бы быть применена для этого случая,  используя
       здесь документы (вставленный текст).  В качестве  примера  этого  может
       служить следующее:
        cat <<-EOF
            Main Menu Information
        EOF

            Однако главная проблема возникает, когда вы печатаете приглашение.
       Для того, чтобы курсор ожидал ввода в конце строки приглашения, необхо-
       димо выдать на терминал символ "\c",  а cat не может сделать этого.  Вы
       выводите на экран меню с помощью cat,  и echo печатает приглашение, ко-
       торое направляется на другую сдвинутую  строку  полностью  заполненного
       экрана. Постоянство и скорость - вот чего мы добиваемся. Обучение таким
       трюкам еще больше поможет вам при написании программ большого  размера,
       которые используют множество меню и другие текстовые выводы на экран.
            Использование оператора echo в  таком  виде  имеет  некоторые  не-
       достатки, но они совершенно тривиальные. Во-первых, тело оператора echo
       должно содержать все,  что вы хотите вывести на экран,  и  это  требует
       абсолютного позиционирования внутри оператора echo для получения симво-
       лов пробела в нужных местах.  Обычно при таком позиционировании имеется
       сдвиг строк в тексте программы, поэтому визуально в том месте командно-
       го файла,  где выводится меню,  появляется этот сдвиг,  но  после  меню
       строки  снова  идут ровно.  Это может немного смущать при чтении текста
       программы.
            Другой несущественной  деталью  является то,  что оператор echo не
       любит выводить символы табуляции.  Если же вы вставили символ табуляции
       внутри кавычек оператора echo,  он обычно выводится как пробел. Для то-
       го,  чтобы заставить echo выводить символы табуляции, вы должны сказать
       это оператору echo на его собственном языке с помощью символов "\t" или
       \\t, если без кавычек. Поэтому меню в cpiobr заполнено символами пробе-
       ла.  Это  также позволяет легко сдвигать меню влево и вправо при помощи
       небольшого количества пробелов для соответствующего позиционирования на
Предыдущая страница Следующая страница
1 ... 19 20 21 22 23 24 25  26 27 28 29 30 31 32 ... 71
Ваша оценка:
Комментарий:
  Подпись:
(Чтобы комментарии всегда подписывались Вашим именем, можете зарегистрироваться в Клубе читателей)
  Сайт:
 
Комментарии (52)

Реклама