Проверочная №1. ПИЭ-2
Формат проведения проверочной работы
Проверочная работа будет проходить в удалённом режиме. Всем студентам будет одновременно выдано проверочное задание. Время выполнение задания — 3 часа с момента начала.
Задание для всех студентов выдаётся одинаковое. Совместное решение задач запрещено. При наличии признаков совместного решения всем участникам будет зачтена оценка 0.
Для каждого задания необходимо разработать Bash-скрипт, решающий поставленную задачу. Все скрипты необходимо объединить в архив и загрузить в качестве ответа на Moodle.
Проверяемые знания
- Базовое использование командного интерфейса.
- Понятие текущего рабочего каталога. Знание особенностей использования абсолютных и относительных путей. Изменение текущего рабочего каталога.
- Манипулирование структуры каталогов файловой системы. Копирование, перемещение и удаление файлов и каталогов.
- Понятие о типах команд в Bash. Чтение руководств и встроенной помощи в зависимости от типа команды.
- Знание структуры файловой системы Linux: назначение каталогов и их структура.
- Перенаправление потоков ввода-вывода, использование конвееров. Знание типичных фильтров для обработки данных.
- Расширение строк в Bash: расширение пути, расширение скобок, арифметическое расширение, расширение параметров, подстановка команд.
- Права доступа к файлам в Linux, изменение прав текстовым и буквенным способом, изменение владельца и группы файлов.
- Написание скриптов на языке Bash.
- Проверка качества исходного кода с помощью ShellCheck.
Задача №1. Создание структуры каталогов
Рассмотрим следующую ситуацию. Мы работаем в фирме, которой каждый месяц необходимо формировать отчётность согласно строгой структуре каталогов. Необходимо разработать скрипт, который будет формировать структуру каталогов для данной отчётности.
Скрипт должен принимать в качестве аргумента путь к несуществующему каталогу, который необходимо создать и в котором необходимо создать структуру каталогов.
Пример работы скрипта:
$ ./create-template.sh template
$ tree template
template
├── hours
│ └── hours.md
├── index.md
├── projects
│ └── projects.md
├── source
└── workers
└── workers.md
Содержимое .md-файлов:
$ cat index.md
# Результаты работ
$ cat hours/hours.md
# Отчёт по часам отработки
$ cat projects/projects.md
# Отчёт по проектам
$ cat workers/workers.md
# Отчёт по работникам
Если скрипту не будет передан путь к каталогу, то он должен сообщать пользователю, что скрипту необходимо передать путь к несуществующему каталогу.
Если скрипту передан путь к существующему каталогу, то скрипт должен завершить работу, указав, что необходимо указать путь к несуществующему каталогу.
Скрипт не должен содержать ошибок согласно проверкам ShellCheck.
Задача №2. Сортировка содержимого каталога
Рассмотрим следующую ситуацию. Вас назначили ответственным за ведение архива документов. В настоящий момент все документы свалены в один большой каталог, в котором нет подкаталогов. В качестве начала работы над задачей вы решили написать скрипт, который позволит отсортировать документы по их mime-типу.
Скрипт должен принимать два аргумента:
- путь к каталогу с исходными данными;
- путь к каталогу с отсортированными данными.
Скрипт должен проверить, что каталог с исходными данными существует. Если он не существует, надо вывести соответствующее сообщение пользователю.
Скрипт должен проверить, что каталог с отсортированными данными не существует. Если он существует, надо вывести предупреждение пользователю.
Для получения mime-типа файла предлагается использовать приложение file
.
Для проверки работоспособности скрипта предлагается использовать каталог /var/log
в качестве каталога с исходными данными.
Пример результата работы приложения:
$ tree sorted
sorted
├── application
│ └── gzip
│ └── alternatives.log.2.gz
└── text
└── plain
└── alternatives.log
Скрипт не должен содержать ошибок согласно проверкам ShellCheck.