#!/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行并将数据库名称添加到相应的字段中,如何实现这一点?为变量中的每个参数重复命令
#!/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行并将数据库名称添加到相应的字段中,如何实现这一点?为变量中的每个参数重复命令
为什么不声明dblist
作为数组?
dblist=(mail ftp www)
for arg in ${dblist}; do
mysqldump .... $arg
并在您的调用中使用$arg
变量。
使用可变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
扩展数组变量的首选方法是'“$ {dblist [@]}”'(不要忘记双精度型引号!) - 这保留了数组元素中的空格,避免了glob扩展等。 –
@GordonDavisson谢谢我编辑了答案。 – anubhava
dblist=(mail ftp)
for arg in ${dblist[*]}
do
mysqldump -u $dbuser --password=$dbpass --socket $socket --database $arg >> /tmp/backup/$arg.sql
done
的作品,谢谢!
上面所缺少的是引用多字值:'dblist =“mail ftp www”' - 不带引号的'$ dblist'将允许for循环遍历3个单词。另外,修复在mysqldump命令中使用'$ dblist'而不是'$ arg'的错误 –