Разработки проекта PuppyRus > Программирование и компиляция

Написание учебного скрипта bash (пути, бэкап, лог)

(1/2) > >>

katsa7:
Добрый день
Задали в колледже написать скрипт
мучаюсь с ним уже три дня
будьте добры, подскажите
1. Скрипт должен создать файл в домашней директории того пользователя, который запустил этот скрипт. Имя файла передается первым параметром.
2. Созданный файл должен быть трижды скопирован с числовыми префиксами в имени файла (например: 1_file, 2_file, 3_file) в указаную директорию. Путь к директории передается вторым параметром.
3. Необходимо ограничить права доступа к скопированным файлам, разрешив чтение и запись только владельцу файла.
4. Далее — создать бэкап этих файлов в виде архива с максимальным сжатием, в имени бэкапа отметить дату создания, бэкап положить в домашнюю директорию пользователя, который запустил скрипт.
5. Скрипт должен автоматически создавать отсутствующие директории и вести записи о своих действиях в лог.

DdShurick:

--- Цитата: katsa7 от 28 Май 2021, 20:05:49 ---будьте добры, подскажите
--- Конец цитаты ---
Понимать как напишите за меня?
Выкладывайте то, что написано, а там видно будет.
1 подсказка. Начало
--- Код ---
#!/bin/sh
touch $HOME/$1
#как вариант echo "любой текст" > $HOME/$1
--- Конец кода ---

katsa7:
благодарствую за начало

пока имеется это, не уверен, насколько это правильно, но выглядит правдоподобно

touch $HOME/$1
for (( i = 1; i <= $3; i++ ))
do
  cp $1 $2$i"_"$(basename $1)
done
chmod u rw

betcher:

--- Цитата: katsa7 от 29 Май 2021, 20:06:17 --- i = 1; i <= $3; i++
--- Конец цитаты ---
Это когда в sh такие конструкции завезли?

betcher:
У вас там всего три копирования, я бы и цикл делать не стал, но если  это ТЗ, то в for проще перечислить for i in 1 2 3 и не делать интератор. Как минимум так быстрее работать будет.
Создание папок mkdir, лучше с ключем -p. При создании или копировании файла папка для него не создается сама, нужно создать заранее.
Права rw только для юзера chmod 600 имя файла.
Когда составляете строку из переменных заключайте их в фигурные скобки, нужно чтобы оболочка знала где имя переменной заканчивается. ${1}.  Пути в  линукс разделяются слэшем, если поставить два слэша подряд, они читаются как один слэш. По этому ${1}/${2} и так далее. И все это вместе надо заключить в двойные кавычки на случай пробелов в путях.
Максимальное сжатие сейчас,  на сколько я знаю, это zstd со словарем, уточните у учителя что он имел ввиду.
По логу можно добавить к каждому действию комментарии типа
echo "bla-bla" >> $log
Можно вообще весь выхлоп скрипта перенаправить в файл. Можно сделать чтоб скрипт перезапускал сам себя с пайпом в tee. Тогда выхлоп будет и на экран и в лог. Если выберете этот вариант напишите, скину готовый кусочек, лень с телефона писать.
Правила хорошего тона:
Добавьте комментарии к действиям, чтоб скрипт был понятнее.
Проверяйте вводимые данные, в вашем случае это позиционные параметры. Проверяйте хотябы их наличие.

Навигация

[0] Главная страница сообщений

[#] Следующая страница

Перейти к полной версии