在mysql查询下的Bash变量

时间:2015-10-11 17:23:06

标签: mysql linux bash

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

由于大多数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

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

有没有办法这样做?

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

Bash脚本现在就在这里:https://github.com/saadismail/wp-clean

感谢你们所有人和他们女孩...

2 个答案:

答案 0 :(得分:1)

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

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

运行此命令后,请验证它:

echo $db_prefix

也许您还不知道如何在此文档中嵌入${db_prefix}变量? 像这样:wp_${db_prefix}_options

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

但是,如果你将"EOF"更改为EOF,剩下的问题就是反引号,它将作为子shell执行,但你需要按字面意思包含它们。解决这个问题的一种方法是省略它们,因为它们不是必需的。

把它放在一起:

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

答案 1 :(得分:0)

你必须做为String

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}