Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 内部循环上有增量的嵌套循环?_Bash_Loops_For Loop_Backup_Database Backups - Fatal编程技术网

Bash 内部循环上有增量的嵌套循环?

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

我正在尝试为我的网站创建备份脚本,但我遇到了嵌套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-`
请参阅以迭代数组键。这样您就不需要嵌套循环:
$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]}在每次传递时获取网站目录和数据库名称?是的,您也可以在单个数组上使用循环并移动每个参数,但对于两个数组,请参阅我的答案。