2016-02-27 119 views
3

我是新的但不完全。我的意思是,我通过这个论坛安静地寻找答案,但我从来没有真正问过自己的问题。将数据发送到MySQL数据库的Bash脚本

我在这里寻找类似的问题以及在其他网站上,但没有多少运气。

让我来描述这个问题。 我必须创建一个脚本,它将根据另一个脚本创建的文件将数据发送到MySQL数据库。数据库用于保存数据,例如MAC地址,标识号,名称等。由另一个脚本创建的文件具有该数据,而我需要执行的操作是将所有数据传输到数据库。我的问题是,这应该是自动发生的,而不是通过登录到数据库并手动执行命令的过程。

我不得不说我对MySQl数据库没有太多经验,在解决这类问题时对我来说是有问题的。

我在bash中创建了一个小小的“脚本”,我希望能够完成我上面描述的内容。我写剧本的基础是什么我已经在互联网上发现,和我的MySQL非常狭义的理解,我不能够改善它,所以请不要太主观:)

#!/bin/bash 

mysql -u root -p 

LOAD DATA INFILE '/home/kiot/Deskotp/Patryk/Imp0' 
INTO TABLE KIOT 
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"' 
LINES TERMINATED BY '\r\n' 

我总是试着去了解,我使用的代码,所以文件Imp0看起来是这样的:

"somedata", 
"somemoredata", 
"evenmoredata", 

当我执行的代码(是的,我已经使它可执行)终端提示我输入root用户密码数据库,当我输入它时,它什么都不做。当我使用命令来显示表KIOT中的列时,我尝试发送的数据不会显示在那里。

我很抱歉让这段时间很长,但我试图尽可能提供信息,以便每个人都能理解我的问题。

对于任何乐于助人的人,我真的很感激。 非常感谢:)

回答

0

这行#!/bin/bash位于脚本的顶部,它告诉程序加载程序在bash解释器中运行脚本的其余部分。因此,当您运行mysql -u root -p并登录时,您正在运行的脚本将等待您从执行mysql程序返回,然后执行脚本的其余部分。

它看起来像你需要使用here document。这里有一个link,应该可以帮助你开始使用它。如果您正确实施,您的脚本应该可以正常工作

0

因为它只有一个SQL命令在本地执行的,另一种可能性是使用-e开关:

mysql -u root -p -e "LOAD DATA INFILE...;" 

所面临的挑战,然后逃逸引号字符"'正确。

另请注意,-p提示为密码。要运行它完全无人值守的,你可以在命令行上提供密码(没有空间-pPASSWORD之间):

mysql -u root -pPASSWORD -e "LOAD..." 

这工作,但不建议(出于安全原因)。也许连接一个只授予LOAD DATA访问权限的专用MySQL用户(而不是root)。

相关问题