Написание скриптовых файлов на Bash #
Простой скрипт на манипулирование файлами #
Скрипт должен выполнять действия из практики по манипулированию файлами:
- Создайте каталог
playground
в домашнем каталоге пользователя. - Внутри данного каталога создайте каталоги
dir1
иdir2
. - Скопируйте файл
/etc/passwd
в созданный каталогplayground
. - Повторите последнюю операцию, использовав параметр
-v
. - Повторите последнюю операцию, использовав параметр
-i
. - Переименуйте файл
passwd
вfun
. - Переместите файл
fun
в каталогdir1
. - Переместите файл
fun
в каталогdir2
. - Переместите файл
fun
в каталогdir1
. - Переместите каталог
dir1
в каталогdir2
. - Верните каталог
dir1
и файлfun
в каталогplayground
. - Удалите каталог
playground
.
Создание резервных копий #
Создайте скрипт, который будет создавать резервные копии нужной информации.
Создайте следующую структуру каталогов. info
, backup
и data
являются каталогами.
info
├── backup/
├── data/
└── make-backup.sh
Предполагается, что запуск скрипта make-backup.sh
будет происходить из каталога info
. При каждом запуске должно происходить следующее:
- В каталоге
bakcup
должен создаваться каталог с текущей датой и временем. Например:2020-10-25-15-35-16
. - В созданный каталог должны помещаться все данные из каталога
data
.
Для получения информации о текущей дате используйте приложение date
. Вам необходимо передать нужный формат данных.
Запуск из любой директории #
Доработайте скрипт таким образом, чтобы его можно было запускать из любого каталога. В этом режиме мы считаем, что каталоги data
и backup
находятся в том же каталоге, в котором находится скрипт.
Т.е. работа скрипта должна быть корректной, если он запускается из каталога info
: ./make-backup.sh
, так и из родительского каталога: ./info/make-backup.sh
.
Для получения пути к каталогу, в котором находится скриптовый файл используйте приложение dirname
. Ему потребуется путь к файлу скрипта, который указан в позиционном аргументе 0
: $0
.
Возможность указания каталога для резервных копий #
Доработайте скрипт таким образом, чтобы пользователь мог указать путь к каталогу, в котором следует размещать резервные копии. Если каталог пользователем не был указан, тогда должен использоваться каталог backup
, который находится рядом со скриптом.
В качестве финальной проверки качества работы скрипта
- Создайте каталог
~/important data backups
, с пробелами в названии. - Запустите скрипт
./make-backup.sh ~/important\ data\ backups
.
Проверка качества скрипта #
Установите приложение shellcheck
, проверьте написанный скрипт и исправьте все ошибки в нём.
Задача. Расширение относительного пути к файлу #
Напишите скрипт, который принимает в качестве аргумента относительный путь к файлу или каталогу. В результате своей работы скрипт должен выводить на стандартный поток вывода абсолютный путь.
Для решения задачи предлагается использовать следующие приложения:
dirname
basename
pwd
Учтите, что приложение должно корректно обрабатывать пути, имеющие пробелы в названии каталогов.
Задача. Архивирование резервных копий #
Доработайте последний скрипт из предыдущей практической работы. Каталог для резервных копий должен содержать tar-архивы. Данные архивы не сжимают информацию, а только собирают файлы внутрь одного архива. Архив должен содержать каталог с резервными данными.
Ранее при выполнении backup.sh
структура каталогов выглядела так:
$ tree -F info
info
├── backups/
│ └── 2020-10-25-15-36-57/
│ └── info.md
└── data/
└── info.md
После внесения изменений каталог должен выглядеть так:
$ tree -F info
info
├── backups/
│ └── 2020-10-25-15-36-57.tar
└── data/
└── info.md
В архиве 2020-10-25-15-36-57.tar
должен находиться каталог 2020-10-25-15-36-57
:
$ tar tf info/backups/2020-10-25-15-36-57.tar
2020-10-25-15-36-57/
2020-10-25-15-36-57/info.md
Не забудьте проверить скрипт с помощью ShellCheck.
Задача. Выполнение сжатия созданного архива #
tar-архивы только собирают внутри себя данных, но их сжатие не происходит по умолчанию. Доработайте скрипт, чтобы он выполнял сжатие данных.
Для сжатия данных используйте одно из следующих приложений:
bzip2
gzip
xz
После выполнения скрипта структура каталога должна выглядеть следующим образом:
$ tree -F info
info
├── backups/
│ └── 2020-10-25-15-36-57.tar.xz
└── data/
└── info.md
Расширение файла должно соответствовать средству, которое использовалось для создания архива
bzip2
:.tar.bz2
gzip
:.tar.gz
,.tgz
xz
:.tar.xz
,txz
Не забудьте проверить скрипт с помощью ShellCheck.
Задача. Использование tar
для архивирования и сжатия файлов
#
Приложение tar
позволяет одновременно собирать приложения в архив с последующим сжатием с помощью соответствующих приложений. Измените скрипт таким образом, чтобы tar
и создавал архив и сжимал его. Необходимую информацию получите в руководстве tar
.
Не забудьте проверить скрипт с помощью ShellCheck.
Задача. Создание скрипта для восстановления информации #
Создайте скрипт restore.sh
. Данный скрипт должен иметь следующую сигнатуру:
./restore.sh --archive ARCHIVE --destination PATH
--archive ARCHIVE path to the backup archive
--destination PATH path to the directory to put the archive contents
С помощью аргумента --archive
указывается путь к архиву, который надо использовать.
С помощью аргумента --destination
указывается путь к каталогу, в котором следует развернуть содержимое архива. Перед разворачиванием архива целевой каталог должен быть очищен от содержимого.
Проверьте написанный скрипт с помощью ShellCheck.