BASH - 使用存储在数组中的参数执行mysql命令

时间:2018-02-13 18:46:14

标签: mysql wordpress bash

我将WordPress数据库名称,用户名和密码存储在一个数组中,我正在尝试让脚本连接到数据库并显示表wp-options中的home / site_url字段。

定义了数组。信息从文件中读取。

var1=$(<dbinfo2.temp)
arr=($var1)

数组作品示例:

echo "${arr[0]}"
echo "${arr[2]}"

: 输出:

pinkywp_wrdp1
Mq2uMCLuGvfyz

但是下面的代码由于某种原因不起作用。

OUTPUT="$(mysql -u ${arr[1]} -p ${arr[2]} -D ${arr[0]} -e "SELECT home FROM wp_options")"
echo "${OUTPUT}"

即使数组中存储的数据库用户名/密码正确,我仍然会收到以下错误。就像mysql没有看到我传递给它的密码一样。

这是运行MySQL和Apache的CentOS / cPanel服务器。

Warning: Using unique option prefix pass instead of password is deprecated and will be removed in a future release. Please use the full name instead.
Enter password: 
ERROR 1045 (28000): Access denied for user 'pinkywp_wrdp1'@'localhost' (using password: NO)

如果你能告诉我我做错了什么以及我如何能够连接并提取我需要的信息,我将永远感激不尽。

非常感谢!

2 个答案:

答案 0 :(得分:2)

评论有限,所以我会将其作为答案发布。尝试:

#!/bin/bash
#
# Explicit is better than implicit.
# Simple is better than complex.
# Complex is better than complicated.
# Flat is better than nested.
# Sparse is better than dense.
# Readability counts.

CONFIG=( $(<dbinfo2.temp ) )

# check that everythink is ok(no spaces - its ok)
DBNAME="-D${CONFIG[0]}"
DBUSER="-u${CONFIG[1]}"
DBPSWD="-p${CONFIG[2]}"

# query db
OUTPUT=$(mysql "${DBNAME}" "${DBUSER}" "${DBPSWD}" -e 'SELECT 1')

# check ouput, should be: 1 1
echo "${OUTPUT}"

exit 0

尝试运行它,如果失败,请在shebang之后添加set -x选项,运行它并从控制台发布完整输出。

#!/bin/bash
set -x
...

答案 1 :(得分:0)

结果证明问题是语法因为两者的使用&#34; &#34;和$()用于填充数组中的变量。这很好用:

OUTPUT=$(mysql -ss -u ${arr[1]} -p${arr[2]} -D ${arr[0]} -e "SELECT option_value FROM wp_options WHERE option_name='home'" 2>/dev/null) 
echo $OUTPUT