Shell-Script

尋找匹配的’‘‘時出現意外的EOF

  • April 15, 2022

我創建了一個腳本來將 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

在上面的文件中,每個引用都是字面的。

引用自:https://unix.stackexchange.com/questions/699180