Bash 内部循环上有增量的嵌套循环?
我正在尝试为我的网站创建备份脚本,但我遇到了嵌套for循环的问题Bash 内部循环上有增量的嵌套循环?,bash,loops,for-loop,backup,database-backups,Bash,Loops,For Loop,Backup,Database Backups,我正在尝试为我的网站创建备份脚本,但我遇到了嵌套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 directo
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-`
请参阅以迭代数组键。这样您就不需要嵌套循环:$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
如果您想备份website1+db1,那么website2+db2最好是使用一个循环来实现这两个功能(迭代数组索引)。我使用两个数组一个用于网站,一个用于数据库我使用两个循环的原因是我可以循环使用数组,但我想我刚刚回答了我自己的问题,如果我要在$WEBSITES$MYSQLDBS中执行WEBSITEBACKUP,我可以执行echo{$WEBSITEBACKUP[1]}和echo{$WEBSITEBACKUP[2]}在每次传递时获取网站目录和数据库名称?是的,您也可以在单个数组上使用循环并移动每个参数,但对于两个数组,请参阅我的答案。