簡體   English   中英

用於在 MySQL 中插入值的 Bash 腳本

[英]Bash script to insert values in MySQL

我想制作一個連接到我的 MySQL 服務器並從 txt 文件中插入一些值的 bash 腳本。 我已經寫下了這個:

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

但我收到以下錯誤:

第 1 行的 ERROR 1136 (21S01):列計數與第 1 行的值計數不匹配

我想錯誤是在我的 txt 文件中,但我已經嘗試了很多變體,但仍然沒有成功的希望。

我的txt文件是這樣的:

10.16.54.29 00:f8:e5:33:22:3f 瑪莎拉

試試這個:

#!/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;

通過這種方式,您可以流式傳輸文件讀取以及 mysql 命令執行。

假設您要添加多行,您可能需要LOAD DATA INFILE語句,而不是INSERT 源文件必須在服務器上,但這里似乎是這種情況。

類似的東西:

#!/bin/bash

mysql -uroot -ptest test << EOF

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

EOF

LOAD DATA INFILE有許多選項,您將通過閱讀文檔發現。

您試圖在需要 3 個參數(IP、MAC 和 SERVER)的 INSERT 語句中將值“cat test.txt”作為字符串插入數據庫中,因此這就是您收到此錯誤消息的原因。

您需要先讀取文本文件並提取 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;

我使用它並且它有效:

mysql -uroot -proot < infile

或者先選擇數據庫

./mysql -uroot -proot db_name < infile

或將整個 SQL 復制到剪貼板並粘貼

pbpaste > temp_infile && mysql -uroot -proot < temp_infile && rm temp_infile
#!/bin/bash

username=root
password=root
dbname=myDB
host=localhost
TS=$(date +%s)

echo $1
mysql -h$host -D$dbname -u$username -p$password -e"INSERT INTO dailyTemp (UTS, tempF) VALUES ($TS, $1);"

exit 0 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM