从Bash脚本插入mysql

时间:2016-08-29 20:56:01

标签: mysql bash

在这里利用了一些帖子和谷歌和朋友,我正在拼命想要让事情变得简单。我想通过bash脚本将数据插入到mysql中。

#!/bin/bash -x
DB_USER='jhatter';
DB_PASSWD='XXXXXXX';

DB_NAME='ppr';
TABLE='graph';

#Collect Rank Information from flightaware.com
day=$(date +"%m/%d/%y")
time=$(date +"%H:%M:%S")
rank=$(curl -s http://flightaware.com/adsb/stats/user/jdhatter11 | grep -i site-ranking-29371 | grep window | awk '{print $2}' | sed s/,//)

#mysql commands
mysql --user=$DB_USER --password=$DB_PASSWD $DB_NAME
INSERT INTO $TABLE (`id `, `day`, `time`, `rank`) VALUES (NULL, "$day", "$time", "$rank");
QUIT;

在mysql登录后手动运行时,此脚本会被禁止停止。它实际上使登录在屏幕上,我已插入数据库。 我是一个巨大的新手,如果它是明显的,请放轻松,但为什么脚本不会继续处理INSERT而是把我扔进mysql。 我想象这一切都在后台发生......

2 个答案:

答案 0 :(得分:6)

您可以在 here-document 中传递命令,如下所示:

mysql --user=$DB_USER --password=$DB_PASSWD $DB_NAME << EOF
INSERT INTO $TABLE (\`id\`, \`day\`, \`time\`, \`rank\`) VALUES (NULL, "$day", "$time", "$rank");
EOF

请注意,`需要转义。 我还删除了QUIT命令, 因为它是不必要的(好的提示@Ven,谢谢)。

实际上,由于这些列名不包含特殊符号, 你实际上并不需要引用它们,并且更简单地编写INSERT查询,如下所示:

mysql --user=$DB_USER --password=$DB_PASSWD $DB_NAME << EOF
INSERT INTO $TABLE (id, day, time, rank) VALUES (NULL, "$day", "$time", "$rank");
EOF

答案 1 :(得分:2)

如果要在脚本中将程序后的输入放入程序,则需要使用here-doc。

mysql --user=$DB_USER --password=$DB_PASSWD $DB_NAME <<EOF
INSERT INTO $TABLE (\`id\`, \`day\`, \`time\`, \`rank\`) VALUES (NULL, "$day", "$time", "$rank");
EOF

请注意,您需要转义反引号,因为它们是shell语法的一部分,用于将命令的输出插入命令行。

对于单行,您还可以使用-e选项。

mysql --user=$DB_USER --password=$DB_PASSWD $DB_NAME -e "NSERT INTO $TABLE (\`id\`, \`day\`, \`time\`, \`rank\`) VALUES (NULL, '$day', '$time', '$rank)"