Bash脚本在MySQL中插入值

use*_*601 15 mysql sql linux bash scripting

我想创建一个连接到我的MySQL服务器的bash脚本,并从txt文件中插入一些valuse.我写下来了:

#!/bin/bash
echo "INSERT INTO test (IP,MAC,SERVER) VALUES ('cat test.txt');" | mysql -uroot -ptest test;
Run Code Online (Sandbox Code Playgroud)

但我收到以下错误:

第1行的错误1136(21S01):列计数与第1行的值计数不匹配

我想错误是在我的txt文件中,但我尝试了很多变化,但仍然没有成功的希望.

我的txt文件如下所示:

10.16.54.29 00:f8:e5:33:22:3f marsara

fej*_*ese 20

试试这个:

#!/bin/bash
inputfile="test.txt"
cat $inputfile | while read ip mac server; do
    echo "INSERT INTO test (IP,MAC,SERVER) VALUES ('$ip', '$mac', '$server');"
done | mysql -uroot -ptest test;
Run Code Online (Sandbox Code Playgroud)

这样你流式读取文件以及mysql命令执行.


Syl*_*oux 11

假设您要添加许多行,您可能需要LOAD DATA INFILE声明,而不是INSERT.源文件必须在服务器上,但似乎就是这种情况.

像这样的东西:

#!/bin/bash

mysql -uroot -ptest test << EOF

LOAD DATA INFILE 'test.txt'
    INTO TABLE tbl_name
    FIELDS TERMINATED BY ' ';

EOF
Run Code Online (Sandbox Code Playgroud)

LOAD DATA INFILE 通过阅读文档,您将发现许多选项.


Sim*_*mon 5

您试图在INSERT语句中将值"cat test.txt"作为字符串插入到需要3个参数(IP,MAC和SERVER)的INSERT语句中,因此这就是您收到此错误消息的原因.

您需要首先读取文本文件并提取IP,MAC和服务器值,然后在查询中使用这些值,如果填充了这样:

#!/bin/bash
echo "INSERT INTO test (IP,MAC,SERVER) VALUES ('10.16.54.29', '00:f8:e5:33:22:3f', 'marsara');" | mysql -uroot -ptest test;
Run Code Online (Sandbox Code Playgroud)