我想连接到mysql databse并执行一些查询并将其结果导出到varibale,而所有这些都需要完全由bash脚本完成
我有一个代码段,但不起作用。
#!/bin/bash
BASEDIR=$(dirname $0)
cd $BASEDIR
mysqlUser=n_userdb
mysqlPass=d2FVR0NA3
mysqlDb=n_datadb
result=$(mysql -u $mysqlUser -p$mysqlPass -D $mysqlDb -e "select * from confs limit 1")
echo "${result}" >> a.txt
出什么问题了?
答案 0 :(得分:1)
in the chat通过使用正确的密码解决了问题。
如果您还想仅获取数据,请将mysql
与-NB
(或--skip-column-names
和--batch
)一起使用。
此外,脚本需要引用变量扩展名,否则用户名/密码会出现问题,其中包含外壳程序特有的字符。另外,大写变量名通常保留给系统变量。
#!/bin/sh
basedir=$(dirname "$0")
mysqlUser='n_userdb'
mysqlPass='d2FVR0NA3'
mysqlDb='n_datadb'
cd "$basedir" &&
mysql -NB -u "$mysqlUser" -p"$mysqlPass" -D "$mysqlDb" \
-e 'select * from confs limit 1' >a.txt 2>a-err.txt
但是理想情况下,您将使用my.cnf
文件来配置用户名和密码。
例如参见
答案 1 :(得分:0)
执行以下操作:
result=$(mysql -u $mysqlUser -p$mysqlPass -D $mysqlDb -e "select * from confs limit 1" | grep '^\|' | tail -1)
Bash的$()语句难以处理包含多行的变量,因此上述hack只抓住了有趣的部分:数据