Überprüfen Sie einen Wert in einer MySQL-Datenbank aus einem Linux-Bash-Skript

0
217

Sie können Ihre Bash-Skripte je nach Inhalt einer MySQL-Datei anders ausführen Datenbank, indem Sie über die Befehlszeile eine Verbindung zu ihr herstellen und eine Abfrage übergeben, die Sie in if Blocks verwenden können, um basierend auf einem Wert zu verzweigen.

Hinweis: Unsere Beispiele zeigen die Verwendung des Root-Benutzers in MySQL, aber Sie würden möchte dort ein anderes Benutzerkonto ersetzen.

SQL-Abfragen von einem Bash-Skript ausführen

Die Syntax für die Ausführung innerhalb eines Bash-Skripts ist dasselbe wie der Zugriff auf eine Datenbank über die Befehlszeile:

mysql -u root -pPassword -h hostname -D dbname -e 'query'

Wenn Ihre Datenbank lokal ausgeführt wird, können Sie das Flag -h weglassen. Wenn Sie eine Entwicklungsdatenbank ausführen, können Sie das Flag -p weglassen, wenn Ihre Datenbank kein Passwort hat.

Dadurch werden die Ergebnisse der Abfrage an STDOUT ausgegeben, die Sie an eine Datei weiterleiten können:

mysql -u root -D Datenbankname -e 'SELECT * FROM table' > Datei

…oder in einer Variablen mit dem $( ) Konstrukt speichern:

variable=$(mysql -u root -D dbname -e 'SELECT * FROM table') Werbung

Die Ausgabe wird jedoch standardmäßig nicht sehr schön sein, sodass Sie die Arbeit erleichtern können, indem Sie das Flag -B verwenden, um im Format Tabulatorgetrennte Werte (TSV) zu drucken, und das Flag -N, um Spaltenüberschriften wegzulassen.

TSV-Dateien sind die weniger verwendeten Cousins ​​von CSV-Dateien , die Sie über die Befehlszeile konvertieren können.

Überprüfen eines bestimmten Werts und Verzweigen

Wenn Sie basierend auf einem Wert in Ihrer Datenbank verzweigen möchten, können Sie eine bestimmte Zeile und Spalte abfragen und die Antwort in einer Variablen speichern. Sie können dann einen bash if Block verwenden, um basierend auf dem Inhalt dieser Variablen zu verzweigen.

field=$(mysql -u root -BNe 'USE test; SELECT label FROM test WHERE id=1') if [ $field == 'TEST' ]; dann //mach Sachen fi

Dies funktioniert nur, wenn Sie einen bestimmten Wert anfordern und einen einfachen Vergleich durchführen. Wenn Sie mehr Manipulation benötigen, als die bash bietet, können Sie awk verwenden, das einzelne Spalten aus dem Text auswählt und Vergleiche durchführt:

if [ $(echo $field | awk '{if ($1 == Wert &&amp ; $2 == Wert2) print 1; else print 0}') == “1” ]; then //do stuff fi

Hier gibt der awk-Befehl true oder false (1 oder 0) aus, was die bash if zum Vergleichen und Verzweigen verwenden kann.

In beiden Beispielen wird davon ausgegangen, dass Ihre SQL-Abfrage nur eine einzelne Zeile zurückgibt, was Sie sicherstellen können, indem Sie basierend auf der ID auswählen. Wenn Sie jedoch eine komplexere Abfrage ausführen, möchten Sie möglicherweise die Antwort mit dem SQL-Befehl LIMIT 1 auf die erste Zeile beschränken.

RELATED: So exportieren Sie eine CSV-Datei aus der MySQL-Befehlszeile

Fehlerprüfung: Überprüfen Sie, ob eine Datenbank oder Tabelle vorhanden ist

Obwohl Sie dieses Skript wahrscheinlich speziell für Ihren Server schreiben, hat eine kleine Fehlerprüfung noch niemandem geschadet. Sie sollten überprüfen, ob die Datenbank und die Tabellen, mit denen Sie arbeiten, tatsächlich existieren, bevor Sie mit ihnen herumspielen. Wenn die Verbindung zur Datenbank nicht funktioniert, wird auch hier ein Fehler ausgegeben.

Werbung

Der SQL-Befehl 'USE dbname' erzeugt einen Fehler, wenn dbname nicht funktioniert ;t vorhanden (Rückgabecode > 0). Sie können dies in einem if-Block verwenden, um zu überprüfen, ob die Datenbank richtig konfiguriert ist:

if mysql -u root -e 'USE mydbname'; then //database exist, do stuff fi

Sie können den if Block invertieren, indem Sie den booleschen Wert mit einem ! beginnen, wodurch der Code nur ausgeführt wird, wenn die Datenbank nicht konfiguriert ist, was für die Ersteinrichtung nützlich ist .

Auf ähnliche Weise können Sie überprüfen, ob Tabellen existieren, indem Sie versuchen, auf die erste Zeile zuzugreifen:

if mysql -u root -e 'USE mydbname; SELECT * FROM Tabellenname LIMIT 1'; dann //Datenbank und Tabelle existieren, mach mehr Dinge, z in einem if-Block, um Fehler zu berücksichtigen.