我正在编写一个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
感谢你们所有人和他们女孩...
答案 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}