Speichern, mysql Abfrage-Ausgabe in eine shell-variable
Brauche ich eine variable, um die Ergebnisse aus der Datenbank abgerufen. Bislang ist es im Grunde, was ich versuche ohne Erfolg.
myvariable=$(mysql database -u $user -p $password | SELECT A, B, C FROM table_a)
Mein Verständnis von bash-Befehlen ist nicht sehr gut wie man sehen kann.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich weiß nicht viel über die MySQL-command-line-interface, aber vorausgesetzt, Sie müssen nur helfen, mit dem einprügeln, sollten Sie versuchen, entweder Sie tauschen die Befehle etwa wie folgt:
die echos der string in MySQL. Oder, Sie können mehr Phantasie und verwenden Sie einige neue bash-Funktionen (hier string)
was in der gleichen Sache (vorausgesetzt, Sie verwenden eine neuere genug bash-version), ohne Einbeziehung echo.
Bitte beachten Sie, dass die -p$password ist kein Tippfehler, aber ist die Art, wie MySQL Passwörter eingegeben werden, die über die Befehlszeile ein (ohne Leerzeichen zwischen der option und dem Wert).
Beachten Sie, dass myvariable wird alles enthalten, was der MySQL-Ausgänge auf standard-out (in der Regel alles außer Fehlermeldungen), einschließlich der Spaltenüberschriften, ASCII-art, frames und so weiter, die möglicherweise oder möglicherweise nicht, was Sie wollen.
EDIT:
Wie bereits erwähnt, scheint es eine
-e
- parameter für MySQL, ich würde für zu gehen, dass man, definitiv.Einen direkteren Weg wäre:
-p
und muss das Kennwort entfernt werden.Zum Lesen der Daten Zeile für Zeile in einem Bash-array, können Sie dies tun:
Oder in einzelne Variablen:
syntax error near unexpected token
<' cut.sh: Zeile 26:done < <
echo ... | mysql ... | while read -a row; do ...; done
. Im Auge zu behalten, während der Körper in einer subshell und nicht auf die Hülle.Haben Sie das Rohr auf die andere Weise herum, und Sie müssen, um das echo der Abfrage, wie folgt:
Eine andere alternative ist nur die mysql-client, wie diese
(
-s
ist erforderlich, um zu vermeiden, die ASCII-Kunst)Nun, die BASH ist nicht die am besten geeignete Sprache zu behandeln diese Art von Szenarien, insbesondere der Umgang mit strings und die Aufteilung SQL-Ergebnisse und dergleichen. Sie haben viel zu arbeiten, um die Dinge, das wäre sehr, sehr einfach in Perl, Python oder PHP.
Zum Beispiel, wie wird Sie bekommen jedes von A, B und C auf eigene variable? Es ist sicherlich machbar, aber wenn Sie nicht verstehen, Rohre und echo (sehr basic-shell-Sachen), es wird nicht einfach sein für Sie zu tun, so dass, wenn überhaupt möglich ich würde eine bessere Nutzung geeignet Sprache.
Wenn Sie wollen, zu einem einzigen Wert in der bash verwenden Sie:
ohne die Leerzeichen nach
-p
. Seine trivial, aber ohne nicht funktionieren.Wenn Sie bestimmte Datenbank Namen und einen host, auf dem die Abfrage ausgeführt werden, dann befolgen Sie folgende Abfrage:
So laufen die mysql-Abfragen zu installieren, müssen Sie den mysql-client auf linux -
Einem anderen Beispiel, wenn der name der Tabelle oder Datenbank enthält nicht unterstützte Zeichen wie ein Leerzeichen, oder '-'