newit1
Goto Top

Shell-Skript - Syntax error: Unterminated quoted string

Hallo

Ich schreibe ein Skript das eine CSV-Datei in eine mySQL Datenbank schieben soll.

Bekomme nach start des Skrips im Terminal ständig diesen Fehler:

6: ./meinskript.sh: Syntax error: Unterminated quoted string


Hier der Code:

#! /bin/sh

mysql --user=root --password=12345 

-e "USE xxxx;" -e "CREATE TABLE xxxx LIKE xxxxxx;"   

-e "INSERT INTO xxxxxx SELECT * FROM xxxxxx;"   

-e "TRUNCATE TABLE xxxxxxx;"   

-e "LOAD DATA LOCAL INFILE /home/myuser/Schreibtisch/'Datei.csv' REPLACE INTO TABLE xxxxx CHARACKTER SET 'utf8' FIELDS TERMINATED BY ';' ENCLOSED BY '"' LINES TERMINATED BY '\n'; \"   


Kann mir da jemand helfen?
Danke!

Content-Key: 361729

Url: https://administrator.de/contentid/361729

Printed on: April 23, 2024 at 16:04 o'clock

Member: SlainteMhath
SlainteMhath Jan 19, 2018 at 10:25:44 (UTC)
Goto Top
Moin,

ich denke das Problem ist
 ENCLOSED BY '"'  

Das " musst du escapen je nach Shell z.B. so \"

lg,
Slainte
Mitglied: 135185
135185 Jan 19, 2018 updated at 10:46:23 (UTC)
Goto Top
Da fehlt etwas escaping
-e "LOAD DATA LOCAL INFILE '/home/myuser/Schreibtisch/Datei.csv' REPLACE INTO TABLE xxxxx CHARACTER SET 'utf8' FIELDS TERMINATED BY ';' ENCLOSED BY '\"' LINES TERMINATED BY '\n';"   
Gruß Sepp
Member: newit1
newit1 Jan 19, 2018, updated at Jan 22, 2018 at 14:30:27 (UTC)
Goto Top
Danke euch, hat schon mal geholfen!

Bekomme allerdings nun noch diesen Fehler:

**ERROR 1064 (42000) at line 1: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '/home/myuser/Schreibtisch/'Datei.csv' REPLACE INTO TABLE xxxxx' at line 1  


Gruß
Mitglied: 135185
135185 Jan 19, 2018 updated at 10:40:47 (UTC)
Goto Top
Nimm mal die einfachen Hochkommas um den Dateinamen Datei.csv raus, hab mich schon gewundert warum dort welche stehen.
Und CHARACKTER ist wohl auch falsch geschrieben.

Brille aufsetzen oder mal Kaffee trinken gehen .... und vielleicht mal selbst dahinter klemmen statt jeden Furz zu erfragen.
Member: newit1
newit1 Jan 19, 2018 at 10:43:30 (UTC)
Goto Top
Habe den selben Fehler trotzdem noch...
Mitglied: 135185
135185 Jan 19, 2018 updated at 10:49:47 (UTC)
Goto Top
Na dann solltest du mal dringend diese Seite lesen
https://dev.mysql.com/doc/refman/8.0/en/load-data.html

Ich habs dir doch oben extra mit den single slashes richtig geändert ...
Member: SlainteMhath
SlainteMhath Jan 19, 2018 updated at 10:49:06 (UTC)
Goto Top
Habe den selben Fehler trotzdem noch...
Trotz Kaffe und Brille? Hm, dann wird's schwierig...

Ein Blick in die Doku würde dir zeigen wie die Syntax korrekt ist:

/EDIT: A mist, zu langsam face-smile
Member: Arano
Arano Jan 19, 2018 updated at 14:05:35 (UTC)
Goto Top
Hi,

welchen meinst du ?
Den aus der Startfrage !?
Ich gehe mal davon aus, denn mir will nicht in den Kopf das es überhaupt anläuft...
und die Anderen es noch nicht angesprochen habe

mysql --user=name --password=geheim \
    -e "STATEMENT" \  
    -e "STATEMENT" \  
    -e "STATEMENT"  
Das Slash am Ende der ersten 3 Zeilen besagt, das es auf der nächsten Zeile weiter geht ! (In der letzten ist keine mehr weil danach keine zu dem Befel gehörende Zeile kommt)
Alternativ kannst du auch alles in eine Zeile schrieben... ist dann nur ziemlich unleserlich.

Diese Frage ist doch auch von dir SQL Befehle über Linux-Shell
So wäre es einfacher, wenn du da mal nach schaust.


~Arano
Mitglied: 135185
135185 Jan 19, 2018 updated at 11:02:28 (UTC)
Goto Top
Ja das ist natürlich Voraussetzung, da hat er wohl zwischenszeitlich seinen Beitrag überarbeitet , denn am Anfang sah der von ihm gespostete Script noch ganz anders aus face-sad.
Naja lassen wir ihn mal was üben face-smile.
Member: newit1
newit1 Jan 19, 2018, updated at Jan 22, 2018 at 14:30:58 (UTC)
Goto Top
Hallo zusammen,

nachdem ich eure Hilfestellungen umgesetzt habe hänge ich an folgendem Punkt:

#! /bin/sh

mysql --user=root --password=12345 \
-e "USE datenbakx;" \  
-e "CREATE TABLE xxxxx LIKE xxxx;" \  
-e "INSERT INTO xxxx SELECT * FROM xxxxx;" \  
-e "TRUNCATE TABLE xxxxxx;" \  
-e "LOAD DATA LOCAL INFILE /home/myuser/Schreibtisch/Datei.csv REPLACE INTO TABLE xxxxx CHARACTER SET 'utf8' FIELDS TERMINATED BY ';' ENCLOSED BY '\"' LINES TERMINATED BY '\n';"  


Ich bekomme folgenden Fehler bei Ausführung:

ERROR 1064 (42000) at line 1: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '/home/myuser/Schreibtisch/Datei.csv REPLACE INTO TABLE xxxxxx' at line 1


Ich wäre euch sehr dankbar wenn mir jemand helfen könnte.
Member: Arano
Solution Arano Jan 19, 2018 at 12:27:23 (UTC)
Goto Top
Hi,
also "INFILE /home/myuser/Schreibtisch/Datei.csv" sollte auf jedenfall in Qotes weil es eine Zeichenkette ist.
INFILE \"/home/myuser/Schreibtisch/Datei.csv\"  
oder
INFILE '/home/myuser/Schreibtisch/Datei.csv'  


~Arano
Member: SlainteMhath
SlainteMhath Jan 19, 2018 at 12:40:23 (UTC)
Goto Top
also "INFILE /home/myuser/Schreibtisch/Datei.csv" sollte auf jedenfall in Qotes weil es eine Zeichenkette ist.
Hätte der TO mal in die Doku geguckt, wäre ihm das evtl. selbst aufgefallen

Naja, is ja Freitag heute face-smile