[英]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.