mysql查询下的Bash变量
我正在写一个bash脚本来轻松清理基于wordpress的网站。我有一个MySQL查询要针对一个bash变量运行,我无法理解这个变量 由于大多数wordpress安全插件更改了数据库的表前缀,因此我想使用: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} &
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
值的方法也被破坏了。我用补丁更新了我的帖子,见顶部。