Создание сценариев Shell с использованием циклов

Red Hat Enterprise LinuxBeginner
Практиковаться сейчас

Введение

В рамках данного испытания вы научитесь создавать простые сценарии командной оболочки (shell scripts), использующие циклические конструкции (такие как for и while) для обработки файлов или аргументов командной строки. Написание сценариев — это мощный инструмент для автоматизации рутинных задач и повышения эффективности вашей работы. Выполнив это задание, вы получите практический опыт разработки скриптов, способных обрабатывать динамические входные данные и выполнять различные операции.

Создание сценария Shell с циклом for

На этом этапе вам предстоит создать сценарий, который использует цикл for для перебора списка файлов в директории и выполнения определенных действий с каждым из них. Этот скрипт продемонстрирует, как динамически обрабатывать несколько файлов, что является одной из самых частых задач при системном администрировании.

Задачи

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

Требования

  • Сценарий должен называться list_files.sh.
  • Файл сценария должен располагаться в директории ~/project.
  • Сценарий должен начинаться с шебанга #!/bin/bash.
  • Сценарий должен принимать путь к директории в качестве первого аргумента командной строки.
  • Сценарий должен использовать цикл for для перебора файлов внутри указанной директории.
  • Для каждого встреченного обычного файла (regular file) скрипт должен выводить строку "File: ", за которой следует базовое имя файла, а затем выводить всё содержимое этого файла.
  • Если аргумент с путем к директории не передан, скрипт должен вывести сообщение о правилах использования (usage message) и завершиться с ненулевым кодом возврата.

Пример

Предположим, вы создали скрипт list_files.sh в папке ~/project и сделали его исполняемым. При запуске с аргументом ~/project вывод должен выглядеть примерно так:

[labex@host ~]$ cd ~/project
[labex@host project]$ chmod +x list_files.sh
[labex@host project]$ ./list_files.sh ~/project
File: file1.txt
Content of file1.txt

File: file2.txt
Content of file2.txt

File: file3.txt
Content of file3.txt

[labex@host project]$

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

[labex@host project]$ ./list_files.sh
Usage: ./list_files.sh <directory_path>
[labex@host project]$ echo $?
1
[labex@host project]$

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

Подсказки

  • Используйте специальную переменную $1 для доступа к первому аргументу, переданному скрипту.
  • Чтобы перебрать файлы в директории, можно использовать шаблон с подстановочным знаком, например "$1"/*.
  • Используйте оператор if с проверкой -f (например, if [ -f "$file" ]), чтобы убедиться, что объект является обычным файлом, а не директорией.
  • Команда basename полезна для извлечения только имени файла из полного пути. Например, basename /home/labex/project/file1.txt выведет file1.txt.
  • Для вывода содержимого файла используйте команду cat.
  • Не забудьте сделать скрипт исполняемым с помощью chmod +x.
  • Чтобы проверить, пуста ли переменная, используйте if [ -z "$variable" ].
  • Для завершения работы скрипта с определенным кодом состояния используйте exit <status_code>.
✨ Проверить решение и практиковаться

Резюме

В этом испытании вы научились создавать базовый сценарий командной оболочки, использующий цикл for для итерации по файлам в директории. Вы попрактиковались в работе с аргументами командной строки, валидации входных данных и использовании условных операторов (if) для фильтрации объектов. Также вы применили команду basename для форматирования вывода и cat для чтения данных. Эти навыки являются фундаментальными для автоматизации задач, обработки данных и эффективного управления файлами в среде Linux, что критически важно для получения сертификации RHCSA и повседневного системного администрирования.