【问题标题】:Bash variable under a mysql querymysql查询下的bash变量
【发布时间】:2015-10-11 17:23:05
【问题描述】:

我正在编写一个 bash 脚本来轻松清理基于 wordpress 的网站。我有一个 MySQL 查询要针对我无法弄清楚的 bash 变量运行。

由于大多数 wordpress 安全插件都会更改数据库的表前缀,所以我想使用:

db_prefix=$(cat wp-config.php | grep "\$table_prefix" | cut -d \' -f 2)

要知道正在使用的确切表前缀,然后使用这个 MySQL 查询:

mysql -D${db_name} -u${db_user} -p${db_pass} << "EOF"
SELECT *
FROM  `wp_options`
WHERE  `option_name` LIKE  'template';
EOF

现在我想在 MySQL 查询的第 3 行使用 $db_prefix 作为变量,方法是将 wp_ 替换为 $db_prefix

有什么办法吗?

编辑:我不知道它这么活跃,我真的很感谢所有的贡献者,你也会在这里看到我的贡献。

Bash 脚本现已上线:https://github.com/saadismail/wp-clean

感谢你们所有人...

【问题讨论】:

    标签: mysql linux bash


    【解决方案1】:

    你必须像字符串一样

    mysql -D${db_name} -u${db_user} -p${db_pass} -e "SELECT * FROM wp_${db_prefix}_options WHERE  option_name LIKE  'template';"
    

    它工作。

    或在行尾使用反斜杠

    echo "SELECT * \
    FROM  wp_${db_prefix}_options \
    WHERE  option_name LIKE  'template " | mysql -D${db_name} -u${db_user} -p${db_pass}
    

    【讨论】:

      【解决方案2】:

      首先, 尝试提取 db_prefix 的单行 shell 脚本不正确。 这种方式应该可行:

      db_prefix=$(grep '^$table_prefix' wp-config.php | cut -d_ -f3)
      

      运行此命令后,验证它:

      echo $db_prefix
      

      也许您不知道如何在 here-document 中嵌入 ${db_prefix} 变量? 像这样:wp_${db_prefix}_options

      但是为了能够嵌入变量,那么 here-document 的起始 EOF 标记不能用双引号括起来,"EOF",因为这样就不会插入变量。

      但是,如果您将"EOF" 更改为EOF,则剩下的问题是反引号,它将由shell 作为子shell 执行,但您需要逐字包含它们。解决这个问题的一种方法是忽略它们,因为它们并不是真正必要的。

      把它放在一起:

      mysql -D${db_name} -u${db_user} -p${db_pass} << EOF
      SELECT *
      FROM  wp_${db_prefix}_options
      WHERE  option_name LIKE  'template';
      EOF
      

      【讨论】:

      • 其实我对mysql查询一无所知,我只是从phpmyadmin复制了那个查询。尝试更新脚本,但这次只是忽略该变量并给出此错误:第 1 行的错误 1146 (42S02):表 'wp30616db_16958._options' 不存在 wp30616db_16958 是此处的数据库名称。
      • 我明白了。实际上,您从wp-config.php 中提取db_prefix 值的方式也被破坏了。我用修复更新了我的帖子,请参阅顶部。
      猜你喜欢
      • 1970-01-01
      • 2019-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-01
      • 2017-10-26
      • 2023-01-29
      • 1970-01-01
      相关资源
      最近更新 更多