【问题标题】:repeat command for every argument in variable对变量中的每个参数重复命令
【发布时间】:2012-10-16 18:03:17
【问题描述】:
#!/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="mail ftp www" -- 未引用的 $dblist 将允许 for 循环遍历这 3 个词。另外,修复mysqldump命令中使用$dblist而不是$arg的错误

标签: bash shell backup


【解决方案1】:

使用变量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[@]}"(不要忘记双引号!)——这样可以保留数组元素中的空格,避免全局扩展等。
【解决方案2】:

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

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

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

这是bash array tutorial

【讨论】:

    【解决方案3】:
    dblist=(mail ftp)
    
    for arg in ${dblist[*]}
    do
       mysqldump -u $dbuser --password=$dbpass --socket $socket --database $arg >> /tmp/backup/$arg.sql
    done
    

    工作,谢谢!

    【讨论】:

      猜你喜欢
      • 2019-04-21
      • 2013-09-29
      • 2015-11-17
      • 1970-01-01
      • 2021-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-15
      相关资源
      最近更新 更多