Форум русскоязычного сообщества Ubuntu


Автор Тема: как пофиксить бак в баше он создает пустой фалй. содзание файла .  (Прочитано 5531 раз)

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

Оффлайн andytux

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 6834
    • Просмотр профиля
Исправление ошибок всегда чревато появлением новых ошибок. Таков закон жанра.
И если в случае с именем переменной вы вольны называть ее как угодно, то в других случаях ошибка в одном месте может совершенно неочевидно сказаться в другом.


Пользователь добавил сообщение 14 Октября 2021, 15:18:20:
Если я правильно понял, что должна делать та строка...
Цитировать
if [ $(df  | grep "$DIR" | awk '{print $4}') > $(du -s "$BACKUP" | awk '{print $1}')  ] ; then
Цитаты взяты отсюда.
Цитировать
Больше, в смысле величины ASCII-кодов

if [[ "$a" > "$b" ]]

if [ "$a" \> "$b" ]

Обратите внимание! Символ ">" необходимо экранировать внутри [ ].
Цитировать
>

больше (внутри двойных круглых скобок)

(("$a" > "$b"))
Цитировать
-gt

больше

if [ "$a" -gt "$b" ]
« Последнее редактирование: 14 Октября 2021, 15:18:20 от andytux »

Оффлайн livanda

  • Автор темы
  • Участник
  • *
  • Сообщений: 233
  • За мной будущее! А что за вами?
    • Просмотр профиля
ALiEN175,
Короче я снова перешела на квадратый скобри иначе он в логах руглася на ссинтаксис с квадратыми скобками такое нет

Available 60229504 > 95676: syntax error in expression (error token is "60229504 > 95676")
Что я сделала я лишь изменила путь бекапа и вот пошла такая ошибка вернула  [[ ]]  вот эти скобки все хорошо

Оффлайн ALiEN

  • Администратор
  • Старожил
  • *
  • Сообщений: 6690
  • 20% Cooler
    • Просмотр профиля
Available 60229504 > 95676: syntax error in expression (error token is "60229504 > 95676")
Кавычки внутри (( )) не нужны.
🖥 AsRock B550M Pro4 :: AMD Ryzen 5 3600 :: 16 GB DDR4 :: AMD Radeon RX 6600 :: XFCE
💻 ACER 5750G :: Intel Core i5-2450M :: 6 GB DDR3 :: GeForce GT 630M :: XFCE

Оффлайн livanda

  • Автор темы
  • Участник
  • *
  • Сообщений: 233
  • За мной будущее! А что за вами?
    • Просмотр профиля
Available 60229504 > 95676: syntax error in expression (error token is "60229504 > 95676")
Кавычки внутри (( )) не нужны.
только одни? если да то почему в сети разные люди используют то так то так

Оффлайн ALiEN

  • Администратор
  • Старожил
  • *
  • Сообщений: 6690
  • 20% Cooler
    • Просмотр профиля
то так то так
В зависимости от интерпретатора и версии.
У меня zsh ругается, если кавычить, а bash - нет :-\
(Нажмите, чтобы показать/скрыть)
🖥 AsRock B550M Pro4 :: AMD Ryzen 5 3600 :: 16 GB DDR4 :: AMD Radeon RX 6600 :: XFCE
💻 ACER 5750G :: Intel Core i5-2450M :: 6 GB DDR3 :: GeForce GT 630M :: XFCE

Оффлайн livanda

  • Автор темы
  • Участник
  • *
  • Сообщений: 233
  • За мной будущее! А что за вами?
    • Просмотр профиля
то так то так
В зависимости от интерпретатора и версии.
У меня zsh ругается, если кавычить, а bash - нет :-\
(Нажмите, чтобы показать/скрыть)
Ну это почти одно и тоже. Но я вот взяла скрипт с ипалвение что делала  тут в этом топике сделала копию и сменила путь чтобы бекап делался в дургую паку. И скрипт слоамлся  :o вренула путь обрато все  рабоатет. Потом он жаловался на проблему снитексиса вренула квадратые скопи и в том путе работает все и пустые файлы не создается  :idiot2: я чето не понимаю но пока не понимаю что я не понимаю.

Оффлайн ALiEN

  • Администратор
  • Старожил
  • *
  • Сообщений: 6690
  • 20% Cooler
    • Просмотр профиля
livanda, выложите скрипт полностью, посмотрим.
🖥 AsRock B550M Pro4 :: AMD Ryzen 5 3600 :: 16 GB DDR4 :: AMD Radeon RX 6600 :: XFCE
💻 ACER 5750G :: Intel Core i5-2450M :: 6 GB DDR3 :: GeForce GT 630M :: XFCE

Оффлайн livanda

  • Автор темы
  • Участник
  • *
  • Сообщений: 233
  • За мной будущее! А что за вами?
    • Просмотр профиля
livanda, выложите скрипт полностью, посмотрим.
#!/bin/bash

DATEY=`date "+%Y"`
ARREY_BACKUP=($HOME/.script)
ARREY_TO_BACKUP_DIR=()

BACKUP_NAME="Cloud_script.backup"
BACKUP_FOLDER="01_Personal/07_Cloud/NextCloud/.Backup/"$BACKUP_NAME""

for DIR in ${ARREY_TO_BACKUP_DIR[@]} ; do
        LOG_ERROR=""$DIR"/"$BACKUP_FOLDER".ERROR.log"
        LOG=""$DIR"/"$BACKUP_FOLDER".log"
        df -h "$DIR" | grep "$DIR" >/dev/null  && \
                mkdir -p "$DIR"/"$BACKUP_FOLDER"


        df "$DIR" >/dev/null && for BACKUP in ${ARREY_BACKUP[@]} ; do

                # Проверка места
                DIR_SIZE="$(echo $(df "$DIR" | awk '{print $4}'))"
                BACKUP_SIZE="$(echo $(du -s "$BACKUP" | awk '{print $1}'))"

                if [[ $DIR_SIZE > $BACKUP_SIZE ]] ; then
                df "$DIR" | grep "$DIR" &>/dev/null  && \
                        ls "$BACKUP" &>/dev/null && \
                        rdiff-backup --force "$BACKUP" "$DIR"/"$BACKUP_FOLDER" 2>"$LOG_ERROR"  1>"$LOG"
                        rdiff-backup --remove-older-than 12M --force "$DIR"/"$BACKUP_FOLDER" 2>>"$LOG_ERROR"  1>>"$LOG"

                else [[ $DIR_SIZE < $BACKUP_SIZE  ]]
                        df -h "$DIR" | grep "$DIR" && echo -e "Non space" 2>"$LOG_ERROR"  1>"$LOG"
                        df -h "$DIR" | grep "$DIR" && rdiff-backup --remove-older-than 1D --force "$DIR"/"$BACKUP_FOLDER" 2>>"$LOG_ERROR"  1>>"$LOG"
                fi #END
        done
done



 Ну се такйоже  код только уже по сриптам. Тут вернула  [[]] вот эти скобки, Еще чтобы убрать повторения вынесла
DIR_SIZE="$(echo $(df "$DIR" | awk '{print $4}'))"
BACKUP_SIZE="$(echo $(du -s "$BACKUP" | awk '{print $1}'))"

Вот это в локальную переменыу или до чернею. И решила попробавть обернуть вывод в echo  зачем не знаю не захотелось . пожалуй все

Оффлайн andytux

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 6834
    • Просмотр профиля
"Ба! Знакомые все лица."
В смысле, те-же самые ошибки. Если не возражаете, я поучаствую.
Как я написал-бы первые несколько строк:
#!/usr/bin/env bash
DATEY="$(date "+%Y")"
ARREY_BACKUP="${HOME}/.script"
...
BACKUP_FOLDER="01_Personal/07_Cloud/NextCloud/.Backup/${BACKUP_NAME}"
« Последнее редактирование: 23 Октября 2021, 13:48:49 от andytux »

Оффлайн livanda

  • Автор темы
  • Участник
  • *
  • Сообщений: 233
  • За мной будущее! А что за вами?
    • Просмотр профиля
"Ба! Знакомые все лица."
В смысле, те-же самые ошибки. Если не возражаете, я поучаствую.
Как я написал-бы первые несколько строк:
#!/usr/bin/env bash
DATEY="$(date "+%Y")"
ARREY_BACKUP="${HOME}/.script"
ARREY_TO_BACKUP_DIR=''
BACKUP_NAME='Cloud_script.backup'
BACKUP_FOLDER="01_Personal/07_Cloud/NextCloud/.Backup/${BACKUP_NAME}"
Я уже писала выше мне так удобно него подежривать. Я не публикую его для всех. Этот код был наисан для меня и только для меня кучу раз копировался и пере писывался и тут идут ошибки с начала изучения баша, я про них знаю и помню. Это мой говона код   8) Я могу исправить этот код но то тода мене придется переисвать кучу кода чтобы я могла не запаутся что да как. В угоду разных людей который даже им пользотся не будут. Вот только у меня это удейте не один день и не один част чтобы его отредактировать не на одной машине к слову. А потом отловить баги. И еще на это убить кучу дней.

Пользователь добавил сообщение 23 Октября 2021, 13:30:51:
ARREY_BACKUP="${HOME}/.script"
ARREY_TO_BACKUP_DIR=''
ARREY_BACKUP="${HOME}/.script"
ARREY_TO_BACKUP_DIR=''
вот эти строчки должны бать в скобках потому что это массивы.

Пользователь добавил сообщение 23 Октября 2021, 13:32:17:
"Ба! Знакомые все лица."
В смысле, те-же самые ошибки. Если не возражаете, я поучаствую.
Как я написал-бы первые несколько строк:
#!/usr/bin/env bash
DATEY="$(date "+%Y")"
ARREY_BACKUP="${HOME}/.script"
ARREY_TO_BACKUP_DIR=''
BACKUP_NAME='Cloud_script.backup'
BACKUP_FOLDER="01_Personal/07_Cloud/NextCloud/.Backup/${BACKUP_NAME}"
Я уже писала выше мне так удобно него подежривать. Я не публикую его для всех. Этот код был наисан для меня и только для меня кучу раз копировался и пере писывался и тут идут ошибки с начала изучения баша, я про них знаю и помню. Это мой говона код   8) Я могу исправить этот код но то тода мене придется переисвать кучу кода чтобы я могла не запаутся что да как. В угоду разных людей который даже им пользотся не будут. Вот только у меня это удейте не один день и не один част чтобы его отредактировать не на одной машине к слову. А потом отловить баги. И еще на это убить кучу дней.

Пользователь добавил сообщение 23 Октября 2021, 13:30:51:
ARREY_BACKUP="${HOME}/.script"
ARREY_TO_BACKUP_DIR=''

вот эти строчки должны бать в скобках потому что это массивы. И использоваться разные ковычки не есть хорошо. Я по умлочанию  испоьльзую "  вот эти мне чить снимни проще
« Последнее редактирование: 23 Октября 2021, 13:32:17 от livanda »

Оффлайн andytux

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 6834
    • Просмотр профиля
Поэтому и ограничился этими строками. Абсолютно никак не повлияют на работу следующих строк. И абсолютно не затрагивают другие скрипты.
Но если приживется, то можете мимоходом "копировать" эти изменения в другие места.
Но этот вариант более нагляден (по моему), более "безотказен" (по-мнению ABS), в последней строке исправлена ошибка (в вашем варианте переменная BACKUP_NAME вне кавычек).
А как вы собрались что-то менять, ничего не меняя...
Цитировать
эти строчки должны бать в скобках потому что это массивы
Не знал, вычеркиваю.
« Последнее редактирование: 23 Октября 2021, 13:47:25 от andytux »

Оффлайн livanda

  • Автор темы
  • Участник
  • *
  • Сообщений: 233
  • За мной будущее! А что за вами?
    • Просмотр профиля
Поэтому и ограничился этими строками. Абсолютно никак не повлияют на работу следующих строк. И абсолютно не затрагивают другие скрипты.
Но если приживется, то можете мимоходом "копировать" эти изменения в другие места.
Но этот вариант более нагляден (по моему), более "безотказен" (по-мнению ABS), в последней строке исправлена ошибка (в вашем варианте переменная BACKUP_NAME вне кавычек).
А как вы собрались что-то менять, ничего не меняя...
Цитировать
эти строчки должны бать в скобках потому что это массивы
Не знал, вычеркиваю.
Ну просто с путями проблем нет. По этому туда не лезу. Тут больше вопрос к поведению сранаому поведнию операторов что мне мне понято а не к путям. С путями все хорошо. Да для кого-то это не логично почему путь собирается по кусочкам хотя можно было одно строкой и без массивом обойдтись но скрипит рабоатет не только тут. Для бекапа. А много где еще и копирутеся из много откуда еще по этому тут тут так. Он не был написан с нуля. Эти строки были написанны фиг занет когда фиг занет для чего и фиг знает заечем. Потом просто копировались немного видо менялись. С целюль экономии времени и моей лени. И на выходе получился вот такой код. Еще раз гворю с путями все хорошо ;) По дебагу пути наромально подсаляются нормально секуюстя и нормально создаются там где это нужно. 
Просто вы видете  видете часть малого крипита который выполнят простоу работу. А в других баш скриптах это не так. Там есть еще более ШИЗОВЫЙ способ работы ая скраит вызвает другой скрипт из фиг знает откуда. Скажем по крону раз в год. И я тутда не лазию уже больше нескольких лет и непоню что там вот то что предлаегает с путями сдлать хто значить нужно переписать все.  :'( А у меня на это времни нет.

Пользователь добавил сообщение 23 Октября 2021, 14:18:56:
andytux,
Я перксно понимаю почнему вы это советуете. Но причну почему я не буду с путямиэто делать писала выше и много очень много раз.
« Последнее редактирование: 23 Октября 2021, 14:19:19 от livanda »

Оффлайн andytux

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 6834
    • Просмотр профиля
Не понимаете.
Цитировать
не логично почему путь собирается по кусочкам
Логично, что по кусочкам. Собирается нелогично.
mkdir -p "$DIR"/"$BACKUP_FOLDER"Формально правильно, но мудрено.
mkdir -p "$DIR/$BACKUP_FOLDER"LOG=""$DIR"/"$BACKUP_FOLDER".log"Настолько мудрено, что неправильно.
LOG="$DIR/$BACKUP_FOLDER.log"
Цитировать
вопрос к поведению сранаому поведнию операторов
Тот-же бардак, что и с путями. Но в "логику" пока не лезу, тут надо голову включить, а она пока в другую сторону смотрит.

Оффлайн livanda

  • Автор темы
  • Участник
  • *
  • Сообщений: 233
  • За мной будущее! А что за вами?
    • Просмотр профиля
Не понимаете.
Цитировать
не логично почему путь собирается по кусочкам
Логично, что по кусочкам. Собирается нелогично.
mkdir -p "$DIR"/"$BACKUP_FOLDER"Формально правильно, но мудрено.
mkdir -p "$DIR/$BACKUP_FOLDER"LOG=""$DIR"/"$BACKUP_FOLDER".log"Настолько мудрено, что неправильно.
LOG="$DIR/$BACKUP_FOLDER.log"
Цитировать
вопрос к поведению сранаому поведнию операторов
Тот-же бардак, что и с путями. Но в "логику" пока не лезу, тут надо голову включить, а она пока в другую сторону смотрит.
Я тоже про это я понимаю что смотрется ужасно и но даже так это не ошибка и не логическая ошибка итоприттор баша видет хорошо на это не ругается. С путями проблем нет. И проблема не в этом. Давайте закроем с путями и вот этим тему, а то это переходит в флуд не потеме ;)

Оффлайн ALiEN

  • Администратор
  • Старожил
  • *
  • Сообщений: 6690
  • 20% Cooler
    • Просмотр профиля
DIR_SIZE="$(echo $(df "$DIR" | awk '{print $4}'))" # байты
BACKUP_SIZE="$(echo $(du -s "$BACKUP" | awk '{print $1}'))" # килобайты, занимаемые на диске
echo - не надо.
DIR_SIZE="$(df "$DIR" | awk '{print $4}')" # байты
BACKUP_SIZE="$(du -s -b "$BACKUP" | awk '{print $1}'))" #байты

if [[ $DIR_SIZE > $BACKUP_SIZE ]] ; then
if (( DIR_SIZE > BACKUP_SIZE )) ; then
ARREY_BACKUP="${HOME}/.script"
ARREY_TO_BACKUP_DIR=''
вот эти строчки должны бать в скобках потому что это массивы.
Вы вручную их в скрипт пишете? В примере один пустой, другой - одна строка.
Логичнее скрипту передавать в параметрах, вызывая через $1 , $2 итд.

не ошибка и не логическая ошибка итоприттор баша видет хорошо
увы, там всё плохо. Удивительно, что вообще работает. Прогнал через shellcheck
(Нажмите, чтобы показать/скрыть)
🖥 AsRock B550M Pro4 :: AMD Ryzen 5 3600 :: 16 GB DDR4 :: AMD Radeon RX 6600 :: XFCE
💻 ACER 5750G :: Intel Core i5-2450M :: 6 GB DDR3 :: GeForce GT 630M :: XFCE

 

Страница сгенерирована за 0.054 секунд. Запросов: 25.