1. Разбор требований задания и структура проекта src/0x с main.sh
Разбор требований задания и структура проекта src/0x с main.sh
Контекст курса и цель
В этом курсе ты реализуешь Bash-скрипт генератора папок и файлов по строгому ТЗ School21. Эта статья — стартовая: мы разберём требования, договоримся о структуре проекта вsrc/0x, определим роли файлов и зафиксируем, какие проверки обязаны быть в каждом скрипте.К концу статьи у тебя будет:
src/0x;Разбор требований задания
Скрипт запускается с 6 параметрами:Ниже — что означает каждый параметр и какие условия нужно валидировать.
Параметры запуска и проверки
Параметр 1 — абсолютный путь
Требование: абсолютный путь до директории, где нужно создать структуру.Проверки:
/;Полезные команды/утилиты:
[[ "path" ]] — существует ли директория;[[ -w "\ge 1n" =~ ^[1-9][0-9]* (или допускай 0kb, если разрешишь — но это обычно бессмысленно для генератора);Для создания файла нужного размера удобно использовать truncate (если доступен) или dd.
Справка:
Правила формирования имён
Требование к именам папок и файлов:_DDMMYY (дата запуска скрипта), например _021121;./aaaz_021121/
- ./aaazzzz_021121Практические выводы для реализации:
a или az), базовую часть надо нарастить повторами, но без нарушения порядка.Команда для даты:
date +%d%m%yСправка:
Генерация структуры на диске
Требование:Важное следствие: скрипт должен корректно обрабатывать конфликты имён. Самая безопасная стратегия:
Ограничение по свободному месту
Требование:/) останется 1 Гб свободного места.Что значит “останется 1 Гб”:
/ перед созданием очередной сущности (или хотя бы перед созданием очередного файла, так как именно файлы занимают место);Технически удобно использовать:
df -k / и брать доступные килобайты;110241024 килобайт.Справка:
Лог-файл
Требование:Практичные решения:
"name");date "+%Y-%m-%d %H:%M:%S";
- если пытаться брать birth time из stat, он может быть недоступен на некоторых ФС, поэтому для учебного проекта безопаснее логировать “время создания” как “время, когда скрипт создал объект”.
stat.Справка:
!Блок-схема, показывающая основные этапы работы скрипта и точки проверок
Требования к структуре проекта School21
По условиям:src;0x, где x — номер задания;main.sh;Для Part 1 логично сделать src/01.
Предлагаемая структура src/01
Ниже структура, которая помогает пройти проверки и удобно развивать проект:Зачем так:
main.sh — точка входа: парсит параметры, вызывает валидацию, запускает генерацию;lib/validate.sh — все проверки аргументов и понятные сообщения об ошибках;lib/naming.sh — генерация имён папок/файлов по правилам (порядок букв, минимум 4 символа, суффикс даты, расширение);lib/fs.sh — всё про файловую систему: проверка свободного места, создание директорий/файлов;lib/log.sh — единый формат логирования;lib/generator.sh — “оркестратор” циклов: создать N папок, в каждой создать M файлов;conf/constants.sh — пороги и константы (например, лимит свободного места, лимиты длины параметров).Минимальные контракты модулей
Чтобы декомпозиция была рабочей, зафиксируй (для себя и для ревью) “кто за что отвечает”. Например:validate.shstderr и завершает exit 1.
naming.sh_DDMMYY.
4. Для файла: отдельно генерирует имя и расширение.
fs.sh/.
2. Создаёт директории.
3. Создаёт файл заданного размера (например, через truncate -s (cd "{BASH_SOURCE[0]}")" && pwd)"shellcheck source=lib/validate.sh
source "SCRIPT_DIR/lib/generator.sh"
shellcheck source=lib/log.sh
source "@" init_log
run_generator "@"
bash
bash src/01/main.sh /opt/test 4 az 5 az.az 3kb
`должен:
создать 4 папки в /opt/test, имена по правилам с суффиксом _DDMMYY;
в каждой папке создать 5 файлов с именем и расширением по правилам;
каждый файл имеет размер 3KB;
при достижении порога свободного места (1 GiB на /`) — остановиться;