我正在尝试为我的网站制作备份脚本,但我遇到嵌套for循环的问题
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但是一旦它到达内部for循环第二次它支持再次启动第一个数据库。
我的问题是,如何才能使嵌套循环增加,直到数组中的所有数据库都已成功备份,或者是否有其他方式我被忽略了?
对于任何想知道的人,数据库没有在他们自己的for循环中备份的原因是因为我从$ WEBSITEBACKUP获取文件夹名称,我希望将数据库存储在与他们网站相同的目录中。 / p>
CURRENT_BACKUP=`echo $WEBSITEBACKUP | sed "s|\$WEB_DIR||g" | tr "/" "-" | cut -b2-`
答案 0 :(得分:1)
请参阅here迭代数组键。这样您就不需要嵌套循环:$i
将迭代0 1 2
,您只需要确保两个数组都具有相同数量的元素。
#/bin/bash
WEBSITES=(A B C)
DATABASES=(X Y Z)
echo "debug: ${!WEBSITES[@]}"
for i in "${!WEBSITES[@]}"; do
site=${WEBSITES[$i]}
db=${DATABASES[$i]}
echo tar $site
echo mysqldump $db
done
结果:
debug: 0 1 2
tar A
mysqldump X
tar B
mysqldump Y
tar C
mysqldump Z