2012-10-26 33 views
3
#!/bin/sh 
dblist=mail ftp www 
for arg in $dblist; do 
mysqldump -u dumper --password=$dbpass --socket $socket --database $dblist >> /tmp/backup/$dblist.sql 
done 

每个来自变量dblist的数据库都应写入一个新的mysqldump行并将数据库名称添加到相应的字段中,如何实现这一点?为变量中的每个参数重复命令

+0

上面所缺少的是引用多字值:'dblist =“mail ftp www”' - 不带引号的'$ dblist'将允许for循环遍历3个单词。另外,修复在mysqldump命令中使用'$ dblist'而不是'$ arg'的错误 –

回答

1

为什么不声明dblist作为数组?

dblist=(mail ftp www) 
for arg in ${dblist}; do 
    mysqldump .... $arg 

并在您的调用中使用$arg变量。

这是bash array tutorial

2

使用可变arg(即你的数据库名称)来创建一个单独的SQL转储文件对于这样每个数据库:

#!/bin/sh 
declare -a dblist=(mail ftp www) 
for arg in "${dblist[@]}" 
do 
    mysqldump -u dumper --password=$dbpass --socket $socket --database $arg >> /tmp/backup/$arg.sql 
done 
+0

扩展数组变量的首选方法是'“$ {dblist [@]}”'(不要忘记双精度型引号!) - 这保留了数组元素中的空格,避免了glob扩展等。 –

+0

@GordonDavisson谢谢我编辑了答案。 – anubhava

0
dblist=(mail ftp) 

for arg in ${dblist[*]} 
do 
    mysqldump -u $dbuser --password=$dbpass --socket $socket --database $arg >> /tmp/backup/$arg.sql 
done 

的作品,谢谢!

相关问题