Shell-Script
尋找匹配的’‘‘時出現意外的EOF
我創建了一個腳本來將 CSV 數據導出到 mysql 表。
#!/bin/bash cd /data/NEW for f in User* do mysql --user="root" --password="user@123" -e "LOAD DATA LOCAL INFILE '/data/NEW/"$f"' ignore into table new.table2 fields terminated by ',' enclosed by '"' lines terminated by '\n' (table_date, table_name, table_count);" done
但我收到以下錯誤。但我找不到我在哪裡搞砸了。
test.sh: line 6: unexpected EOF while looking for matching `'' test.sh: line 9: syntax error: unexpected end of file
有人可以告訴我哪裡可以改進嗎?
您似乎想在雙引號命令字元串中包含雙引號:
"... enclosed by '"' lines ..."
您需要轉義嵌入的雙引號字元,以便它包含在字元串中而不是終止它:
"... enclosed by '\"' lines ..."
另請注意,您的使用在
$f
此處完全未引用:"LOAD DATA LOCAL INFILE '/data/NEW/"$f"' ignore ..."
最好引用它(即讓它被它已經是其中一部分的雙引號字元串引用):
"LOAD DATA LOCAL INFILE '/data/NEW/$f' ignore ..."
或者,如果您需要在命令字元串中包含雙引號字元:
"LOAD DATA LOCAL INFILE '/data/NEW/\"$f\"' ignore ..."
您也可以使用 here-document 來簡化引用:
mysql ... <<END_SQL LOAD DATA LOCAL INFILE '/data/NEW/$f' IGNORE INTO TABLE new.table2 FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' (table_date, table_name, table_count); END_SQL
在上面的文件中,每個引用都是字面的。