mysql查询下的Bash变量

mysql查询下的Bash变量,mysql,linux,bash,Mysql,Linux,Bash,我正在写一个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} &

我正在写一个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-D${db\u name}-u${db\u user}-p${db\u pass}首先,
试图提取
db\u前缀的单行shell脚本不正确。
这种方法应该有效:

db_prefix=$(grep '^$table_prefix' wp-config.php | cut -d_ -f3)
运行此命令后,请验证它:

echo $db_prefix
也许您不知道如何在here文档中嵌入
${db\u prefix}
变量? 像这样:
wp{db\u prefix}\u选项

但是为了能够嵌入变量,此处文档的起始
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-D${db\u name}-u${db\u user}-p${db\u pass}必须按字符串执行

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}

实际上我对mysql查询一无所知,我只是从phpmyadmin复制了这个查询。尝试更新脚本,但这次它只是忽略了该变量&给出了以下错误:第1行的错误1146(42S02):表“wp30616db_16958._options”不存在wp30616db_16958是这里的数据库名称。我明白了。实际上,从
wp config.php
提取
db_prefix
值的方法也被破坏了。我用补丁更新了我的帖子,见顶部。