Мастер сценариев

ShellBeginner
Практиковаться сейчас

Введение

Добро пожаловать, будущий системный администратор! Вы только что присоединились к активно развивающейся технологической компании в качестве младшего DevOps-инженера. Ваш старший коллега отправился в заслуженный отпуск, а на вашем столе появилась важная задача. Основной сервер приложения создаёт множество файлов журналов, и они быстро занимают всё больше места на диске. Ваша миссия — стать мастером сценариев.

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

Начнём писать сценарии!

Важное уведомление
В этом испытании рассматриваются навыки, выходящие за рамки курса Quick Start with Linux. Если вы ещё не изучали эти темы, пока пропустите это испытание и продолжите с курса Linux for Noobs — следующего курса в учебной траектории Linux.
Когда вернуться:
  1. Пройдите управляемую лабораторную работу Shell Scripting Fundamentals, а затем вернитесь и снова попробуйте выполнить это испытание.

Написание простого сценария оболочки

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

Задания

  • Создайте новый файл сценария оболочки с именем log_manager.sh в каталоге ~/project.
  • Добавьте в самое начало сценария строку shebang (#!/bin/bash). Она указывает системе, какой интерпретатор использовать.
  • Добавьте команду, которая выводит на экран сообщение «Log Manager Initialized.».
  • Сделайте сценарий исполняемым с помощью команды chmod +x.

Требования

  • Сценарий должен называться log_manager.sh.
  • Сценарий должен находиться в каталоге ~/project.
  • Первая строка должна быть #!/bin/bash.
  • Для вывода требуемого сообщения сценарий должен использовать команду echo.
  • У сценария должны быть права на выполнение (используйте chmod +x log_manager.sh).

Примеры

После создания файла и выдачи ему права на выполнение полный процесс должен выглядеть так:

Сначала проверьте, что файл сценария существует:

ls ~/project/
log_manager.sh

Выдайте сценарию права на выполнение:

chmod +x ~/project/log_manager.sh

Теперь запустите сценарий:

./log_manager.sh

Сценарий должен вывести:

Log Manager Initialized.

Также можно проверить содержимое сценария:

cat ~/project/log_manager.sh

Файл должен содержать:

#!/bin/bash

echo "Log Manager Initialized."

Подсказки

  • Для создания и редактирования файла можно использовать текстовый редактор командной строки, например nano. Пример: nano log_manager.sh.
  • Команда echo выводит строку текста.
  • Используйте chmod +x filename, чтобы сделать сценарий исполняемым. Параметр +x добавляет владельцу файла право на выполнение.

Добавление переменных и пользовательского ввода

Сценарий с жёстко заданными значениями не отличается гибкостью. Чтобы сделать сценарий более динамичным и пригодным для повторного использования, добавьте переменные. Вы определите переменную для каталога с журналами и запросите у пользователя метку запуска резервного копирования. Благодаря этому сценарий можно адаптировать к разным ситуациям без изменения самого кода.

Задания

  • Измените сценарий log_manager.sh.
  • Определите переменную с именем LOG_DIR и присвойте ей путь /home/labex/project/app_logs.
  • Добавьте строку, выводящую сообщение «Enter the backup filename: », чтобы запросить ввод пользователя.
  • Используйте команду read, чтобы сохранить введённое значение в новую переменную с именем BACKUP_FILENAME.
  • Добавьте последнюю команду echo для подтверждения настроек. Она должна выводить сообщение наподобие «Backing up logs to: [filename]», где [filename] — значение, введённое пользователем.

Требования

  • Сценарий должен содержать переменную LOG_DIR со значением /home/labex/project/app_logs.
  • Для получения пользовательского ввода сценарий должен использовать команду read.
  • Введённое пользователем значение должно сохраняться в переменной BACKUP_FILENAME.
  • В последнем выводе должна использоваться переменная $BACKUP_FILENAME.

Примеры

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

./log_manager.sh
Log Manager Initialized.
Enter the backup filename: daily_backup
Backing up logs to: daily_backup

Сценарий должен остановиться на запросе «Enter the backup filename:» и ждать, пока пользователь введёт имя и нажмёт Enter. После ввода он выводит сообщение с подтверждением, используя полученное значение. В этом испытании это значение является меткой запуска, отображаемой в выводе. Само резервное копирование выполняется на шаге 4: файлы .log копируются в ~/project/backups.

Подсказки

  • Для определения переменной используйте синтаксис VARIABLE_NAME="value". Между именем переменной, знаком = и значением не должно быть пробелов.
  • Чтобы использовать значение переменной, добавьте перед её именем знак $, например $MY_VARIABLE.
  • Команда read приостанавливает сценарий и ждёт, пока пользователь что-либо введёт и нажмёт Enter.

Реализация условной логики

Хороший сценарий умеет предвидеть проблемы. Что произойдёт, если указанный каталог с журналами не существует? Сценарий завершится с ошибкой. Чтобы сделать его надёжнее, добавьте условную логику. С помощью оператора if проверьте существование каталога с журналами до выполнения каких-либо операций.

Задания

  • Измените сценарий log_manager.sh.
  • Добавьте оператор if, который проверяет существование каталога, указанного переменной $LOG_DIR.
  • Если каталог существует, сценарий должен продолжить работу как раньше: запросить имя файла и выполнить остальные действия.
  • Если каталог не существует, сценарий должен вывести сообщение об ошибке «Error: Log directory not found.» и немедленно завершиться с ненулевым кодом возврата.

Требования

  • Сценарий должен использовать оператор if.
  • Условие должно проверять существование каталога с помощью оператора тестирования -d.
  • Если каталог не существует, сценарий должен вывести указанное сообщение об ошибке с помощью echo.
  • Если каталог не существует, сценарий должен завершиться командой exit 1.

Примеры

Если каталог с журналами существует, сценарий должен работать нормально:

./log_manager.sh
Log Manager Initialized.
Log directory found. Proceeding...
Enter the backup filename: test_backup.tar.gz
Backing up logs to: test_backup.tar.gz

Если каталог с журналами не существует, сценарий должен вывести ошибку и завершиться:

./log_manager.sh
Log Manager Initialized.
Error: Log directory not found.

В этом случае сценарий завершается сразу после вывода сообщения об ошибке: он не запрашивает пользовательский ввод и не выполняет операции резервного копирования.

Подсказки

  • Синтаксис базового оператора if: if [ condition ]; then ... else ... fi.
  • Проверка [ -d "$DIRECTORY_PATH" ] возвращает истину, если $DIRECTORY_PATH существует и является каталогом.
  • exit 1 — стандартный способ сообщить, что сценарий завершился с ошибкой.

Цикл для операций с файлами

Теперь перейдём к основной части автоматизации! Вам нужно обработать файлы в каталоге с журналами. Используйте цикл for, чтобы пройти по всем файлам с расширением .log в каталоге app_logs. В этом испытании достаточно просто скопировать их в новый каталог резервных копий. Введённое значение BACKUP_FILENAME остаётся меткой запуска, которая выводится в сообщении, а не именем создаваемого сценарий файла архива.

Задания

  • Сначала создайте каталог с именем backups внутри ~/project, куда будут копироваться файлы журналов.
  • Измените сценарий log_manager.sh.
  • Внутри блока if, где подтверждено существование каталога, добавьте цикл for.
  • Цикл должен проходить по каждому файлу с расширением .log в каталоге $LOG_DIR.
  • Внутри цикла используйте команду cp, чтобы скопировать каждый файл журнала в каталог ~/project/backups.
  • Для каждого скопированного файла выводите сообщение наподобие «Copied [filename]».

Требования

  • Сначала создайте каталог ~/project/backups из командной строки.
  • Сценарий должен использовать цикл for.
  • Цикл должен обрабатывать файлы в $LOG_DIR, соответствующие шаблону *.log.
  • Для копирования файлов в ~/project/backups внутри цикла необходимо использовать команду cp.
  • Оператор echo должен сообщать имя каждого копируемого файла.

Примеры

После выполнения этого шага запустите сценарий и укажите имя резервной копии. Сценарий должен обработать все файлы журналов и вывести примерно такой результат:

./log_manager.sh
Log Manager Initialized.
Log directory found. Proceeding...
Enter the backup filename: daily_backup
Backing up logs to: daily_backup
Copied /home/labex/project/app_logs/access.log
Copied /home/labex/project/app_logs/debug.log
Copied /home/labex/project/app_logs/error.log
Backup complete.

Сценарий должен пройти по каждому файлу .log в каталоге и вывести сообщение «Copied» для каждого файла. Точные имена зависят от файлов журналов, находящихся в каталоге app_logs.

После завершения сценария проверьте, что файлы были скопированы, просмотрев содержимое каталога backups:

ls ~/project/backups/
access.log  debug.log  error.log

Подсказки

  • Для создания каталога используйте команду mkdir.
  • Цикл for для обработки файлов можно записать так: for file in /path/to/*.log; do ... done.
  • Синтаксис команды cp: cp <source> <destination>.
  • На каждой итерации переменная цикла, например file, содержит полный путь к текущему файлу.

Итоги

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

В этом испытании вы освоили несколько фундаментальных понятий написания сценариев оболочки:

  • Создание и структура сценария с помощью shebang.
  • Использование переменных для динамической работы сценария.
  • Получение пользовательского ввода с помощью read.
  • Надёжная проверка ошибок с помощью операторов if.
  • Автоматизация повторяющихся задач с помощью циклов for.
  • Управление правами доступа к файлам и запуск сценария.

Теперь ваш сценарий умеет автоматически проверять существование каталогов с журналами, обрабатывать все файлы журналов и копировать их в резервное расположение. Это важный шаг на вашем пути к профессии DevOps-инженера или системного администратора. Освоенные навыки станут основой для создания гораздо более сложных сценариев автоматизации, которые смогут управлять серверами, развёртывать приложения и обрабатывать данные. Вы доказали, что способны справляться с ответственными задачами и создавать рабочие решения. Отличная работа!

✨ Проверить решение и практиковаться✨ Проверить решение и практиковаться✨ Проверить решение и практиковаться✨ Проверить решение и практиковаться