Создание сценария 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>.