Ich versuche, ein Skript zu schreiben, die Zeilen aus einer Datei liest enthalten:Ausführen von SQL-Abfragen einer Datei im speziellen Format mit
- einen Dateinamen eines SQL-Skript, und
- einige SQL-Abfragen auf demselben Zeile
und startet eine Abfrage.
Es gibt eine list.txt
Datei in folgendem Format:
query.sql; set @var:='prod';
wo query.sql
eine Datei mit SQL-Abfragen, zB:
select *
from db
where [email protected]
Ich versuche, einen Bash-Skript zu schreiben, das das ausführt Abfragen wie folgt:
mysql -uroot -proot -e
"set @var:='prod';
select *
from db
where [email protected];"
Hier ist, was ich versucht habe so weit:
while read line;
do app=$(echo $line | awk '{for (i=2; i <= NF; i++) printf FS$i; print NL }';
cat `echo $line | awk -F\; '{print $1}'`; echo ";");
mysql -uroot -proot -e "`echo $app`"
done < list.txt
Aber ich ein SQL-Fehler habe, weil die Schale nicht gut das *
Zeichen in den query.sql
entweicht.
mein Code debuggen ich erhalten:
$echo $app
$set @var:='prod'; select a list.txt mysql query1.sql query.sql from db where [email protected] ;
Wie kann ich den Code anpassen, um
$echo $app
$set @var:='prod'; select * from db where [email protected] ;
haben?
Weitere Details
Es gibt eine loop
im awk
Befehl, da die Datei list.txt
mehrere Abfragen enthalten, zB:
query.sql; set @var:='prod'; @a=asd; @b=zxc, @...=...;
Mein Fehler, nur die Frage bearbeitet (es war die echte Abfrage, die ich auf dem Server habe) –
@AlessandroBlasetti, möchten Sie die zweite SQL-Anweisung ausführen (nach dem ersten ';'), dann die Anweisungen aus der Datei vor der angegebenen erstes ';', oder? –
@RuslanOsmanov Ich möchte meine letzte Zeile ausführen: 'set @var: = 'prod'; Wählen Sie * aus db wobei system = @ var; ' –