【发布时间】:2014-12-29 23:30:34
【问题描述】:
我正在尝试为我的网站制作备份脚本,但我遇到了嵌套 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 获取文件夹名称,并且我希望将数据库存储在与其网站相同的目录中。
CURRENT_BACKUP=`echo $WEBSITEBACKUP | sed "s|\$WEB_DIR||g" | tr "/" "-" | cut -b2-`
【问题讨论】:
-
如果你想备份 website1+db1 然后 website2+db2 最好有一个单独的循环来做这两个(遍历数组索引)。
-
我使用两个数组,一个用于网站,一个用于数据库,我有两个循环的原因是我可以循环遍历数组,但我想我只是回答了我自己的问题,如果我要这样做的话$WEBSITES $MYSQLDBS 中的 WEBSITEBACKUP 我可以执行 echo {$WEBSITEBACKUP[1]} 和 echo {$WEBSITEBACKUP[2]} 以在每次传递时获取网站目录和数据库名称?
-
是的,您也可以在单个数组上使用循环并移动每个参数,但对于两个数组,请参阅我的答案。
标签: bash loops for-loop backup database-backups