Формат проведения проверочной работы

Проверочная работа будет проходить в удалённом режиме. Всем студентам будет одновременно выдано проверочное задание. Время выполнение задания — 3 часа с момента начала.

Задание для всех студентов выдаётся одинаковое. Совместное решение задач запрещено. При наличии признаков совместного решения всем участникам будет зачтена оценка 0.

Для каждого задания необходимо разработать Bash-скрипт, решающий поставленную задачу. Все скрипты необходимо объединить в архив и загрузить в качестве ответа на Moodle.

Проверяемые знания

  • Базовое использование командного интерфейса.
  • Понятие текущего рабочего каталога. Знание особенностей использования абсолютных и относительных путей. Изменение текущего рабочего каталога.
  • Манипулирование структуры каталогов файловой системы. Копирование, перемещение и удаление файлов и каталогов.
  • Понятие о типах команд в Bash. Чтение руководств и встроенной помощи в зависимости от типа команды.
  • Знание структуры файловой системы Linux: назначение каталогов и их структура.
  • Перенаправление потоков ввода-вывода, использование конвееров. Знание типичных фильтров для обработки данных.
  • Расширение строк в Bash: расширение пути, расширение скобок, арифметическое расширение, расширение параметров, подстановка команд.
  • Права доступа к файлам в Linux, изменение прав текстовым и буквенным способом, изменение владельца и группы файлов.
  • Написание скриптов на языке Bash.
  • Проверка качества исходного кода с помощью ShellCheck.

Задача №1. Создание структуры проекта

Допустим, что мы работаем в мебельной фирме. Для каждого заказчика необходимо сформировать каталог проекта, который должен содержать:

  • Модель мебелировки комнаты.
  • Каталог с библиотекой мебельных элементов.
  • Каталог с чертежами, полученных из модели.

В каждом из созданных каталогов должен находиться файл info.txt, содержащий текстовое сообщение о том какую информацию необходимо разместить в данном каталоге.

Скрипт должен принимать в качестве аргумента путь к несуществующему каталогу, который необходимо создать и в котором необходимо создать структуру каталогов.

  • Если скрипту не будет передан путь к каталогу, то он должен сообщать пользователю, что скрипту необходимо передать путь к несуществующему каталогу.
  • Если скрипту передан путь к существующему каталогу, то скрипт должен завершить работу, указав, что необходимо указать путь к несуществующему каталогу.

Скрипт не должен содержать ошибок согласно проверкам ShellCheck.

Задача №2. Создание архива документов

При удалённой форме обучения для одной темы может быть сформировано несколько видео файлов. Для удобства их выкладывания необходимо брать данные файлы из разных каталогов и складывать в целевой каталог. При перемещении в целевой каталог их необходимо переименовывать.

Пример исходного каталога:

$ tree video
video
├── source-1/
│   └── video.mp4
└── source-2/
    └── video.mp4

Пример вызова скрипта и результирующего каталога

$ ./store-videos.sh destination/2020-07-15/ video/source-1/video.mp4 video/source-2/video.mp4
$ tree destination
destination
└── 2020-07-15/
    ├── video-1.mp4
    └── video-2.mp4

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

Имена файлов при перемещении должны изменяться на video-НОМЕР.mp4, где НОМЕР - это порядковый номер видео файлов в аргументах скрипта.

Если скрипту будет передано недостаточно аргументов, то он должен сообщать об этом пользователю.

Если скрипту вместо файла для копирования был передан неправильный путь, то скрипт должен сообщать о проблеме и не пытаться копировать данный файл.

Скрипт не должен содержать ошибок согласно проверкам ShellCheck.