将MySQL“SELECT”查询传递给shell变量

时间:2016-06-10 09:54:39

标签: mysql linux bash shell variables

假设我首先在表中插入某些值,然后下一个查询显示其中一列的最大值,然后将其存储在变量中。然后我需要显示该变量,使其显示最大值。 例如:

sudo mysql -u$mysql_user -p$mysql_pwd -h $mysql_host --database $db_name -e "INSERT INTO service_status_batch VALUES ();"
batch_id= sudo mysql -u$mysql_user -p$mysql_pwd -h $mysql_host --database $db_name -e "SELECT MAX(id) as maxid  FROM service_status_batch;"
echo "Value of the id is:" $batch_id

然后,此echo命令应显示变量的值。但是它最终以表格的形式显示了选择查询的值,而不是变量的值。

是否有特定的方法将查询值分配给shell脚本中的变量?

我附上了它显示的选择查询值。

not showing the value of the batch id variable

2 个答案:

答案 0 :(得分:0)

使用-s-N选项和mysql命令一样。

sudo mysql -u$mysql_user -p$mysql_pwd -h $mysql_host --database $db_name -e "INSERT INTO service_status_batch VALUES ();"
batch_id=`sudo mysql -u$mysql_user -p$mysql_pwd -h $mysql_host --database $db_name -s -N -e "SELECT MAX(id) as maxid  FROM service_status_batch;"`
echo "Value of the id is:" $batch_id

请参阅-s和-N的详细信息:

--silent, -s

   Silent mode. Produce less output. This option can be given multiple
   times to produce less and less output.

   This option results in nontabular output format and escaping of
   special characters. Escaping may be disabled by using raw mode; see
   the description for the --raw option.

--skip-column-names, -N

   Do not write column names in results.

答案 1 :(得分:0)

EDIT3:错误的解释 - 我试图展示如何获得价值,因为它可以在必要时使用: <击>

<击>
sudo echo $(echo "SELECT MAX(id) as maxid  FROM service_status_batch" | mysql dbnamehere -uUser -pPassword)

<击>

EDIT1:变量版本显然是

EDIT2:根据建议使用shellcheck.net更正了变量赋值。谢谢。

EDIT3:最后一次编辑,在mysql命令之前添加sudo,因为除了root之外的用户,它不会在没有它的情况下工作。

batch_id=$(echo "SELECT MAX(id) as maxid  FROM service_status_batch" | sudo mysql dbnamehere -uUser -pPassword)