Сайт | Скачать | Видео | Wiki

Автор Тема: Написание учебного скрипта bash (пути, бэкап, лог)  (Прочитано 2265 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн katsa7

  • Новичок
  • *
  • Сообщений: 4
  • Репутация: +0/-0
  • Автор темы
Добрый день
Задали в колледже написать скрипт
мучаюсь с ним уже три дня
будьте добры, подскажите
1. Скрипт должен создать файл в домашней директории того пользователя, который запустил этот скрипт. Имя файла передается первым параметром.
2. Созданный файл должен быть трижды скопирован с числовыми префиксами в имени файла (например: 1_file, 2_file, 3_file) в указаную директорию. Путь к директории передается вторым параметром.
3. Необходимо ограничить права доступа к скопированным файлам, разрешив чтение и запись только владельцу файла.
4. Далее — создать бэкап этих файлов в виде архива с максимальным сжатием, в имени бэкапа отметить дату создания, бэкап положить в домашнюю директорию пользователя, который запустил скрипт.
5. Скрипт должен автоматически создавать отсутствующие директории и вести записи о своих действиях в лог.
« Последнее редактирование: 31 Май 2021, 10:01:21 от sfs »

Оффлайн DdShurick

  • Это Риччи
  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 8635
  • Репутация: +187/-2
  • Старый чайник
Re: Написание скрипта bash
« Ответ #1 : 28 Май 2021, 20:27:25 »
будьте добры, подскажите
Понимать как напишите за меня?
Выкладывайте то, что написано, а там видно будет.
1 подсказка. Начало
Код
#!/bin/sh
touch $HOME/$1
#как вариант echo "любой текст" > $HOME/$1
« Последнее редактирование: 28 Май 2021, 20:36:49 от DdShurick »
Моноблок Lenovo IdeaCentre c200 (Intel Atom D525, Intel GMA 3150, 2 Gb RAM) Richy64
Nettop Acer Aspire Revo R3610 (Atom N330, nVidia GeForce 9400, 3 Gb RAM) Richy64

Оффлайн katsa7

  • Новичок
  • *
  • Сообщений: 4
  • Репутация: +0/-0
  • Автор темы
Re: Написание скрипта bash
« Ответ #2 : 29 Май 2021, 20:06:17 »
благодарствую за начало

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

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

Оффлайн betcher

  • Ветеран
  • *****
  • Сообщений: 3019
  • Репутация: +35/-0
    • MagOS linux
Re: Написание скрипта bash
« Ответ #3 : 30 Май 2021, 04:51:45 »
i = 1; i <= $3; i++
Это когда в sh такие конструкции завезли?

Оффлайн betcher

  • Ветеран
  • *****
  • Сообщений: 3019
  • Репутация: +35/-0
    • MagOS linux
Re: Написание скрипта bash
« Ответ #4 : 30 Май 2021, 05:24:29 »
У вас там всего три копирования, я бы и цикл делать не стал, но если  это ТЗ, то в for проще перечислить for i in 1 2 3 и не делать интератор. Как минимум так быстрее работать будет.
Создание папок mkdir, лучше с ключем -p. При создании или копировании файла папка для него не создается сама, нужно создать заранее.
Права rw только для юзера chmod 600 имя файла.
Когда составляете строку из переменных заключайте их в фигурные скобки, нужно чтобы оболочка знала где имя переменной заканчивается. ${1}.  Пути в  линукс разделяются слэшем, если поставить два слэша подряд, они читаются как один слэш. По этому ${1}/${2} и так далее. И все это вместе надо заключить в двойные кавычки на случай пробелов в путях.
Максимальное сжатие сейчас,  на сколько я знаю, это zstd со словарем, уточните у учителя что он имел ввиду.
По логу можно добавить к каждому действию комментарии типа
echo "bla-bla" >> $log
Можно вообще весь выхлоп скрипта перенаправить в файл. Можно сделать чтоб скрипт перезапускал сам себя с пайпом в tee. Тогда выхлоп будет и на экран и в лог. Если выберете этот вариант напишите, скину готовый кусочек, лень с телефона писать.
Правила хорошего тона:
Добавьте комментарии к действиям, чтоб скрипт был понятнее.
Проверяйте вводимые данные, в вашем случае это позиционные параметры. Проверяйте хотябы их наличие.

Оффлайн katsa7

  • Новичок
  • *
  • Сообщений: 4
  • Репутация: +0/-0
  • Автор темы
Re: Написание скрипта bash
« Ответ #5 : 30 Май 2021, 17:01:27 »
Можно вообще весь выхлоп скрипта перенаправить в файл. Можно сделать чтоб скрипт перезапускал сам себя с пайпом в tee. Тогда выхлоп будет и на экран и в лог. Если выберете этот вариант напишите, скину готовый кусочек, лень с телефона писать.

Огромное вам и искренне спасибо!
было бы замечательно, ибо все остальное благодаря вашей помощи работает, а с логами что-то разобраться не могу

Оффлайн betcher

  • Ветеран
  • *****
  • Сообщений: 3019
  • Репутация: +35/-0
    • MagOS linux
Re: Написание скрипта bash
« Ответ #6 : 30 Май 2021, 19:56:24 »
с логами что-то разобраться не могу

if ! lsof 2> /dev/null | grep -q "$(basename $0).log"  ;then
   date > ./"$(basename $0).log"
   echo "$0 $@" >> ./"$(basename $0).log"
   /bin/bash $0 "$@" 2>&1 | tee  ./"$(basename $0).log"
   exit ${PIPESTATUS[0]}
fi

Типа такого в начало скрипта и все что скрипт пишет на экран будет писаться и в лог тоже (это из реального скрипта, под себя поправьте).
Там вообще много вариантов можно насочинять. Возможно вам будет достаточно типа такого:
LOG=~/bla-bla.log
date > "$LOG"
echolog() {
    echo $@
    echo $@ >> $LOG
}

И в коде сопровождаете действия текстом  используя вместо echo - echolog.
или так:
echolog $(cp bla-bla bla-bla 2>&1)

Оффлайн katsa7

  • Новичок
  • *
  • Сообщений: 4
  • Репутация: +0/-0
  • Автор темы
Re: Написание скрипта bash
« Ответ #7 : 30 Май 2021, 22:33:01 »
Огромное вам спасибо, вы очень мне помогли
 :angel:

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 33966
  • Репутация: +231/-0
    • PuppyRus-A
Re: Написание скрипта bash
« Ответ #8 : 31 Май 2021, 09:59:55 »
Задали в колледже написать скрипт
Это какой-то специализированный колледж? Какая специальность если не секрет и что на такую специальность по линуксу дают?
На наком Линуксе (название дистриба) проводится обучение?