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-ID: 361729

Url: https://administrator.de/forum/shell-skript-syntax-error-unterminated-quoted-string-361729.html

Ausgedruckt am: 15.01.2025 um 11:01 Uhr

SlainteMhath
SlainteMhath 19.01.2018 um 11:25:44 Uhr
Goto Top
Moin,

ich denke das Problem ist
 ENCLOSED BY '"'  

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

lg,
Slainte
135185
135185 19.01.2018 aktualisiert um 11:46:23 Uhr
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
newit1
newit1 19.01.2018, aktualisiert am 22.01.2018 um 15:30:27 Uhr
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ß
135185
135185 19.01.2018 aktualisiert um 11:40:47 Uhr
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.
newit1
newit1 19.01.2018 um 11:43:30 Uhr
Goto Top
Habe den selben Fehler trotzdem noch...
135185
135185 19.01.2018 aktualisiert um 11:49:47 Uhr
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 ...
SlainteMhath
SlainteMhath 19.01.2018 aktualisiert um 11:49:06 Uhr
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
Arano
Arano 19.01.2018 aktualisiert um 15:05:35 Uhr
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
135185
135185 19.01.2018 aktualisiert um 12:02:28 Uhr
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.
newit1
newit1 19.01.2018, aktualisiert am 22.01.2018 um 15:30:58 Uhr
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.
Arano
Lösung Arano 19.01.2018 um 13:27:23 Uhr
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
SlainteMhath
SlainteMhath 19.01.2018 um 13:40:23 Uhr
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