Я пытаюсь сделать сценарий резервного копирования для моих сайтов, но я имею проблемы с вложенным для циклаВложенная петля с приращением на внутренний цикл?
BACKUP_DIR="/path/to/output"
WEB_DIR="/srv/http"
WEBSITES=($WEB_DIR/website_one $WEB_DIR/website_two)
MYSQLDBS=(database_one database_two)
for WEBSITEBACKUP in $WEBSITES
do
# tar commands here for website directories
for DATABASEBACKUP in $MYSQLDBS
do
# mysql dump commands here for databases
break
done
done
Я надеялся, что петля 1 будет резервную копию веб-сайта, а затем открыть контур 2, который будет создать резервную копию базы данных затем вырваться из внутреннего цикла и продолжить резервное копирование веб-сайта 2, но как только он попадает во внутренний цикл, второй раз он снова создает резервную копию первой базы данных.
Мой вопрос: как я могу получить вложенный цикл для увеличения, пока все базы данных в массиве не будут успешно скопированы, или есть другой способ, который я упустил?
Для тех, кто интересно, причины, почему базы данных не подкреплены в своем собственном цикл, потому что я получаю имя папки от $ WEBSITEBACKUP и я хотел бы магазин базы данных в тот же каталог, что и их веб-сайт.
CURRENT_BACKUP=`echo $WEBSITEBACKUP | sed "s|\$WEB_DIR||g" | tr "/" "-" | cut -b2-`
Если вы хотите сделать резервную копию WEBSITE1 + DB1 затем website2 + db2, лучше иметь один цикл, который делает оба (итерация по индексу массива). – eckes
Я использую два массива для веб-сайтов, а один для баз данных - причина, по которой у меня было две петли, поэтому я мог бы перебирать массивы, но я думаю, что я просто ответил на свой вопрос, если бы я должен был сделать для WEBSITEBACKUP в $ WEBSITES $ MYSQLDBS i мог бы сделать echo {$ WEBSITEBACKUP [1]} и echo {$ WEBSITEBACKUP [2]}, чтобы получить имя сайта и имя базы данных на каждом проходе? – Michael
Да, вы также можете использовать цикл над одним массивом и сдвигать каждый параметр, но для двух массивов см. Мой ответ. – eckes