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

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

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

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

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

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

Задача

Предположим, что мы проводим анализ текстовых работ, которые пришли в качестве ответов на задание в Moodle. Работы студентов лежат в следующей структуре каталогов:

$ tree -f students
students
└── source/
    ├── Комаров Сергей Юрьевич/
    │   └── zadacha otvet.txt
    ├── Петров Василий Игоревич/
    │   └── ответ.txt
    └── Чесарова Дарья Михайловна/
        └── text-one.txt

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

Необходимо написать скрипт, который поможет преподавателю в выставлении оценок за представленные работы. Скрипт принимает на вход путь к каталогу с данными. В примере это каталог students.

Затем скрипт для каждого студента выполняет следующие действия:

  1. Печатает имя студента.
  2. С помощью приложения less открывает файл.
  3. Просит пользователя вести оценку работы для данного студента. В качестве оценки может выступать любое значение, однако предполагается ввод числа от 0 до 6.
  4. В зависимости от оценки распределяет каталоги с данными студентов в каталоги с соответствующими оценками.

Пример обработки исходных данных скриптом:

$ tree -F students
students
├── results/
│   ├── 3/
│   │   └── Петров Василий Игоревич/
│   │       └── ответ.txt
│   └── 4/
│       ├── Комаров Сергей Юрьевич/
│       │   └── zadacha otvet.txt
│       └── Чесарова Дарья Михайловна/
│           └── text-one.txt
└── source/

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

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

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

Дополнительно следует реализовать следующие проверки:

  • В каталоге с исходными данными присутствует каталог source.
  • В каталоге с ответом студента находится ровно 1 файл.
  • Ответ студента представляет собой именно текстовый файл.