Введение
В рамках данного испытания вы научитесь создавать простые сценарии командной оболочки (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 и повседневного системного администрирования.



