12

我是 bash 脚本的新手。我想将 sql-query 输出保存在变量中,但是

实际上,我必须将每个查询连接到 mysql:

mysql -u $MYUSER -p$MYPASS -D database

并希望将每个输出保存在单独的变量中

示例查询是:SELECT domain FROM domains WHERE user='$USER'

$variable1 = FIRST_OUTPUT
$variable2 = 2ND_OUTPUT

谢谢你

4

3 回答 3

27

取自bash 脚本 - select from database into variable,您可以将查询结果读入变量。

例子

mysql> SELECT * FROM domains;
+-------+---------+
| user  | domain  |
+-------+---------+
| user1 | domain1 |
| user2 | domain2 |
| user3 | domain3 |
+-------+---------+

用法

$ myvar=$(mysql -D$MYDB -u$MYUSER -p$MYPASS -se "SELECT domain FROM domains")
$ echo $myvar
domain1 domain2 domain3

echo是用于输出的 bash 命令。然后,您可以拆分$myvar为单独的变量

$ read var1 var2 var3 <<< $myvar
$ echo $var1
domain1
$ echo $var2
domain2

您可以将这两个命令组合成一个命令:

read var1 var2 var3 <<< $(mysql -D$MYDB -u$MYUSER -p$MYPASS -se "SELECT domain FROM domains")

可以将结果存储到数组中(如果您不知道那里有多少记录,这很有用):

$ read -ra vars <<< $(mysql -D$MYDB -u$MYUSER -p$MYPASS -se "SELECT domain FROM domains")
$ for i in "${vars[@]}"; do
$     echo $i
$ done
domain1
domain2
domain3
于 2013-07-21T17:58:49.897 回答
2

我做了这个

变量=mysql -u root -ppassworrd database << EOF select MAX(variable) AS a from table where variable2 = 'SOMETEXT' AND day(datevalue) >= 22; EOF

我希望它有帮助

于 2018-03-01T03:24:15.720 回答
2

另一种做法是:

dbquery=`mysql -D$MYDB -u$MYUSER -p$MYPASS -se "SELECT domain FROM domains"`      
dbquery_array=( $( for i in $dbquery ; do echo $i ; done ) )

第一行以dbquery类似数组的方式将查询的所有输出存储在一个变量中。第二行通过简单的循环将 转换dbquery为数组。dbquery_arrayfor

于 2016-06-10T01:13:23.693 回答