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

Программирование на sh, быть может немного про альтернативные языки
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
.scu
сержант
Сообщения: 198
Зарегистрирован: 2008-05-26 11:25:08
Контактная информация:

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

Непрочитанное сообщение .scu » 2008-05-28 3:47:36

Ввиду того, что в программировании под шел пока что я совсем мало знаю, требуется помощь :)

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

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

# удаляем последний бекап
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
Вопрос - как его автоматизировать?
А именно:
- сделать переменную с кол-вом архивов всего (дней)
- переменование сделать циклом

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35456
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

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

Непрочитанное сообщение Alex Keda » 2008-05-28 8:01:27

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

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$    
Убей их всех! Бог потом рассортирует...

.scu
сержант
Сообщения: 198
Зарегистрирован: 2008-05-26 11:25:08
Контактная информация:

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

Непрочитанное сообщение .scu » 2008-05-28 8:28:20

спасибо %)
главное - привыкнуть к синтаксису

.scu
сержант
Сообщения: 198
Зарегистрирован: 2008-05-26 11:25:08
Контактная информация:

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

Непрочитанное сообщение .scu » 2008-05-29 22:05:30

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

.scu
сержант
Сообщения: 198
Зарегистрирован: 2008-05-26 11:25:08
Контактная информация:

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

Непрочитанное сообщение .scu » 2008-05-29 22:11:06

уже нашла сама как :)

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

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

.scu
сержант
Сообщения: 198
Зарегистрирован: 2008-05-26 11:25:08
Контактная информация:

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

Непрочитанное сообщение .scu » 2008-05-29 22:51:59

еще вопросы:
1) как правильно умножать на отриц. число? точнее обозначить отрицание
типо:

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

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

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

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

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35456
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

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

Непрочитанное сообщение Alex Keda » 2008-05-29 23:04:22

1. не знаю.
2. вообще, переменная корректно выглядит так: ${var_name}
в этом же виде она прекрасно отделяется от остального
Убей их всех! Бог потом рассортирует...

.scu
сержант
Сообщения: 198
Зарегистрирован: 2008-05-26 11:25:08
Контактная информация:

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

Непрочитанное сообщение .scu » 2008-05-30 2:42:28

Спасибо!


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

.scu
сержант
Сообщения: 198
Зарегистрирован: 2008-05-26 11:25:08
Контактная информация:

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

Непрочитанное сообщение .scu » 2008-05-30 2:49:39

что-то не могу сообразить, как правильно подставить переменную, чтобы дата нормально вычислялась:

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

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

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35456
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

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

Непрочитанное сообщение Alex Keda » 2008-05-30 7:48:31

кавычки вокруг переменной - тока двойные.
иначе оставит как есть а не подставит значение
Убей их всех! Бог потом рассортирует...