循环外变量丢失

循环外变量丢失

我正在尝试使用 mysqldump 备份我的数据库,同时忽略变量中定义的一些表,但是在循环时,我得到了最后一个表名,它被覆盖了,我怎样才能将表存储在变量中并在循环后获取它们?

ignoreTables=('visitors_15012016 visitors_Original')

for line in $ignoreTables
do
echo 'mysqldump --ignore-table='$line
done

echo 'li '$line // here I got "visitors_Original"

mysqldump --log-error=/var/log/mysql-dump/dump.log -u USER -pPASSWD DBName $line | bzip2 > /path2file/file.sql.bz2

提前致谢

答案1

你的问题和你的脚本有点令人困惑。当你使用临时变量时线并用它来迭代你的变量忽略表最后一个元素将保留在迭代器中,这是 for 循环的基本逻辑。如果您希望仅将某些选定的表转储到文件中,您可以这样做。创建一个文件,将所有需要的表放入其中。然后

for i in $(cat list_of_required_tables.txt);do
mysqldump --log-error=/var/log/mysql-dump/dump.log -u USER -pPASSWD DBName $i >> mysql_dump.sql
done

或者如果您认为应该忽略的表列表相当多,那么您可以创建所有表的列表,然后创建不需要的表的列表。然后使用下面的循环。

for i in $(cat list_of_tables_not_required.txt);do
sed -i "/$i/d" list_of_all_tables.txt
done

然后使用第一个代码。

相关内容