Наши партнеры








Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

На главную -> MyLDP -> Электронные книги по ОС Linux
Руководство по Bash для начинающих
Назад Глава 8: Пишем интерактивные скрипты Вперед

Подводим итог

В этой главе мы узнали, как предоставлять пользователю комментарии и как выдавать ему приглашение на ввод данных. Обычно это делается с помощью комбинации команд echo/read. Мы также обсудили, как с помощью дескрипторов файлов и перенаправлений можно использовать файлы для ввода и вывода данных, и как это можно совместить с получением данных, вводимых пользователем.

Мы подчеркнули важность предоставления в наших скриптах сообщений для пользователей. И, как во всех других ситуациях, лучше дать слишком много информации, чем ее окажется мало. Для создания списков, в которых будут храниться варианты, выбираемые пользователями можно использовать встраиваемые документы (Here documents). Этой конструкцией также можно пользоваться в случае, когда скрипт выполняется в фоновом режиме без вмешательства пользователя.

Упражнения

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

  1. Напишите скрипт, который спрашивает у пользователя его возраст. Если возраст равен или больше 16, выдайте сообщение о том, что ему разрешено употреблять алкоголь. Если возраст пользователя меньше 16, выдайте сообщение о том, сколько лет ему надо ждать прежде, чем ему юридически будет разрешено пить.

    В качестве дополнения рассчитайте, сколько по статистике уже выпил пива пользователь, которому больше 18 лет (из расчета - 100 литров / год), и выдайте пользователю эту информацию.

  2. Напишите скрипт, у которого в качестве аргумента указывается один файл. Используйте методику встраиваемых документов (here document) и предложите пользователю выбрать один из нескольких вариантов сжатия файлов. В качестве вариантов выбора могут быть gzip, bzip2, compress и zip.
  3. Напишите скрипт, который автоматизирует использование команды tar так, чтобы человек, исполняющий скрипт, когда он делает резервную копию своего домашнего директория, всегда при создании резервной копии использовал правильные параметры (cvp) и правильный директорий (/var/backups). Реализуйте следующие возможности:
    • Проверка количества аргументов. Скрипт должен работать без аргументов. Если присутствуют какие-нибудь аргументы, выдайте сообщение о правиле использовании скрипта и выйдите из него.
    • Определение, достаточно ли в директории backups свободного пространства для хранения резервной копии.
    • Запрос пользователя о том, нужно ли полное или инкрементное резервное копирование. Если у пользователя до сих пор нет полной резервной копии, выдача сообщение о том, что будет сделана полная резервная копия. В случае инкрементного резервного копирования, выполнение такого копирования только в случае, если после полной резервной копии прошло не больше одной недели.
    • Сжатие резервной копии с помощью любого инструмент сжатия. Информирование пользователя о том, что скрипт выполняет сжатие, поскольку для этого может потребоваться некоторое время, в течение которого пользователь может начать беспокоиться, если на экран не будет выдаваться никаких сообщений.
    • Выдача сообщения, информирующего пользователя о размере сжатой резервной копии.

    Смотрите дополнительную информацию с помощью команды info tar или в книге "Introduction to Linux" ("Введение в Linux") в главе 9 "Preparing your data" ("Подготовка ваших данных").

  4. Напишите скрипт, который будет называться simple-useradd.sh и будет добавлять в систему локального пользователя. Этот скрипт должен делать следующее:
    • Использовать только один аргумент, либо прекратить работу после выдачи сообщения об использовании.
    • Проверять /etc/passwd и определять первый свободный идентификатор пользователя ID. Выдавать сообщение, содержащее этот ID.
    • Создавать личную группу для этого пользователя, проверяя файл /etc/group. Выдавать сообщение, содержащее идентификатор группы.
    • Получать информацию от оператора: комментарий, описывающий этого пользователя, список командных оболочек, допустимых для использования (проверьте возможность использования, в противном случае выдайте сообщение о правиле использования скрипта и выйдите из него), дату истечения срока действия учетной записи этого пользователя, дополнительные группы, в которые новый пользователь должен быть включен.
    • Имея полученную информацию, добавлять строку в /etc/passwd, /etc/group и /etc/shadow; создавать домашний директорий пользователя (с надлежащими правами доступа!); добавлять пользователя в нужные второстепенные группы.
    • Устанавливать для этого пользователя в качестве пароля, используемого по умолчанию, какую-нибудь известную строку.
  5. Перепишите скрипт из раздела "Проверка существования файла", так чтобы он читал входные данные , получаемые от пользователя, а не брал их из первого аргумента.

Предыдущий раздел: Оглавление Следующий раздел:
Получение данных, вводимых пользователем   Глава 9