嵌套循环,内循环增量?

时间:2014-12-29 23:30:34

标签: 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 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-`

1 个答案:

答案 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