【问题标题】:Insert into mysql from Bash script [duplicate]从 Bash 脚本插入 mysql [重复]
【发布时间】:2016-08-29 20:56:01
【问题描述】:

在这里使用了一些帖子以及 Google 和朋友,我正在拼命尝试让一些简单的工作。我想通过 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 中。 我设想这一切都发生在后台......

【问题讨论】:

  • insert 查询将是 bash 脚本的命令,不是 mysql 客户端。你必须将查询作为参数传递给 mysql,或者通过它的标准输入。

标签: mysql bash


【解决方案1】:

您可以在 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

【讨论】:

  • 太棒了,最后我觉得我尝试了 100 万种类似变体的组合。谢谢你的解释。解决了
【解决方案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)"

【讨论】:

    猜你喜欢
    • 2018-02-20
    • 2012-11-18
    • 2015-08-03
    • 2019-01-05
    • 2017-07-14
    • 2019-10-31
    • 1970-01-01
    • 2021-08-22
    相关资源
    最近更新 更多