Страница 1 из 1

Как правильно делать циклирование?

Добавлено: 2008-05-28 3:47:36
.scu
Ввиду того, что в программировании под шел пока что я совсем мало знаю, требуется помощь :)

есть скрипт резервирования:

Код: Выделить всё

# удаляем последний бекап
rm /backup-date/backup-8-`date -v -8d '+%d-%B-%Y'`.tar.gz

# копируем 0 за день -1 в 1
cp /backup-date/backup-0-`date -v -1d '+%d-%B-%Y'`.tar.gz /backup-date/backup-1--`date -v -1d '+%d-%B-%Y'`.tar.gz

# копируем 1 за день -2 в 2
cp /backup-date/backup-1-`date -v -2d '+%d-%B-%Y'`.tar.gz /backup-date/backup-2--`date -v -2d '+%d-%B-%Y'`.tar.gz

# копируем 2 за день -3 в 3
cp /backup-date/backup-2-`date -v -3d '+%d-%B-%Y'`.tar.gz /backup-date/backup-3--`date -v -3d '+%d-%B-%Y'`.tar.gz

# копируем 3 за день -4 в 4
cp /backup-date/backup-4-`date -v -4d '+%d-%B-%Y'`.tar.gz /backup-date/backup-4--`date -v -4d '+%d-%B-%Y'`.tar.gz

# копируем 4 за день -5 в 5
cp /backup-date/backup-4-`date -v -5d '+%d-%B-%Y'`.tar.gz /backup-date/backup-5--`date -v -4d '+%d-%B-%Y'`.tar.gz

# копируем 5 за день -6 в 6
cp /backup-date/backup-5-`date -v -6d '+%d-%B-%Y'`.tar.gz /backup-date/backup-6--`date -v -4d '+%d-%B-%Y'`.tar.gz

# копируем 6 за день -7 в 7
cp /backup-date/backup-6-`date -v -7d '+%d-%B-%Y'`.tar.gz /backup-date/backup-7--`date -v -4d '+%d-%B-%Y'`.tar.gz

# копируем 7 за день -8 в 8
cp /backup-date/backup-7-`date -v -8d '+%d-%B-%Y'`.tar.gz /backup-date/backup-8--`date -v -4d '+%d-%B-%Y'`.tar.gz

# делаем новый бекап за сегодня
tar -zcvpf /backup-date/backup-0-`date '+%d-%B-%Y'`.tar.gz \
    --directory / --exclude=var/spool --exclude=*.log \
    --exclude=*.iso etc home var/lib/named
Вопрос - как его автоматизировать?
А именно:
- сделать переменную с кол-вом архивов всего (дней)
- переменование сделать циклом

Re: Как правильно делать циклирование?

Добавлено: 2008-05-28 8:01:27
Alex Keda

Код: Выделить всё

lissyara$ sh test.sh
1
2
3
4
5
6
7
lissyara$ cat test.sh
#!/bin/sh

i=1
while test $i != 8
do
        echo $i
        i=`expr $i + 1`

done

lissyara$    

Re: Как правильно делать циклирование?

Добавлено: 2008-05-28 8:28:20
.scu
спасибо %)
главное - привыкнуть к синтаксису

Re: Как правильно делать циклирование?

Добавлено: 2008-05-29 22:05:30
.scu
Спасибо! еще вопрос, как сделать дату -1 день и тп?
в форуме нашла: `date -v -5d '+%d-%B-%Y'`
но линукс ругается на опцию -v - такой не находит...

Re: Как правильно делать циклирование?

Добавлено: 2008-05-29 22:11:06
.scu
уже нашла сама как :)

Код: Выделить всё

date -d 'now -1 day' '+%d-%B-%Y'

Re: Как правильно делать циклирование?

Добавлено: 2008-05-29 22:51:59
.scu
еще вопросы:
1) как правильно умножать на отриц. число? точнее обозначить отрицание
типо:

Код: Выделить всё

DAY=`expr -1 * ($i + 1)*`
2) как в строке использовать переменные, точнее отделять их от всего остального?

Код: Выделить всё

echo /backup-date/backup-$i-`date -d '$DAY' day' '+%d-%B-%Y'`.tar.gz 
так или как-то иначе нужно, чтобы все верно работало?

Re: Как правильно делать циклирование?

Добавлено: 2008-05-29 23:04:22
Alex Keda
1. не знаю.
2. вообще, переменная корректно выглядит так: ${var_name}
в этом же виде она прекрасно отделяется от остального

Re: Как правильно делать циклирование?

Добавлено: 2008-05-30 2:42:28
.scu
Спасибо!


надеюсь кто-нибудь знает ответ на второй вопрос :-)

Re: Как правильно делать циклирование?

Добавлено: 2008-05-30 2:49:39
.scu
что-то не могу сообразить, как правильно подставить переменную, чтобы дата нормально вычислялась:

Код: Выделить всё

while test $i != $DAYS
do
        DAY=`expr $i + 1`
        echo $DAY
        echo /backup-date/backup-$i-`date -d -'${DAY}' day' '+%d-%B-%Y'`.tar.gz \
        # /backup-date/backup-`expr $i + 1`-`date -d 'now -d $DAY day' '+%d-%B-%Y'`.tar.gz
        i=`expr $i + 1`
done

Re: Как правильно делать циклирование?

Добавлено: 2008-05-30 7:48:31
Alex Keda
кавычки вокруг переменной - тока двойные.
иначе оставит как есть а не подставит значение