Hallo ich habe eine Frage. (bin mir nicht sicher ob das hier rein gehört oder in Serverdienste.... ggf. bitte vom Moderator verschieben) Mein Ziel ist es eine SQL Datenbank aus einem Shellscript heraus abzufragen und abhängig vom Ergebnis eine Aktion auszuführen. Ein Shell Script ist kein Problem. Auch eine SQL Abfrage bekomme ich mit Select hin. Aber wie packe ich das in ein Shell script so das ich mit dem Ergebnis arbeiten kann. Erstes googlen zeigte mir, das dafür Python oder Perl bessere Lösungen bereit hält. Was denkt das Forum? Perl? Wenn ja, wie ungefähr sähe so ein Grundgerüst aus?
SQL Abfrage per Shell
![]() Anmeldungsdatum: Beiträge: 132 |
|
||||
Ehemaliger
Anmeldungsdatum: Beiträge: 3046 |
Wenn du Perl oder Python kannst, kannst du es ja damit machen. Wenn die bash jetzt dein erstes Mittel der Wahl ist geht das auch:
Mit -u gibst du den Usernamen an, mit -p, dass er ein Passwort hat und zum Schluss die Datenbank. Wenn du das Passwort nicht manuell eingeben willst, kannst du es auch direkt hinter das p schreiben, z.B. wenn das Passwort "pw" ist
In so einem Fall sollter der Nutzer allerdings keine Schreibrechte haben, da im Falle eines Scripts das Passwort ja dann unverschlüsselt auf der Festplatte liegt. |
||||
(Themenstarter)
![]() Anmeldungsdatum: Beiträge: 132 |
kann ich das ergebnis von dem ersten beispiel in eine variable schreiben lassen? so das ich damit arbeiten kann? |
||||
(Themenstarter)
![]() Anmeldungsdatum: Beiträge: 132 |
würde das so gehen?
|
||||
Ehemaliger
Anmeldungsdatum: Beiträge: 3046 |
|||||
Projektleitung
Anmeldungsdatum: Beiträge: 13192 |
Passt schon.
Dafür müssten wir wissen, um welche Datenbank es sich handelt. Ist es Postgres, MySQL, MariaDB, Oracle...?
Das hängt davon ab: wenn Du sehr viel mit der Datenbank interagieren musst, lohnt sich der Aufwand in eine Sprache einzuarbeiten und die entsprechende Funktionalität zu installieren. Wenn das dann erst mal läuft, werden komplette Anwendungen, die immer wieder mit der Datenbank sprechen müssen einfacher und meist auch schneller (weil man nicht immer neue Prozesse für die Kommunikation starten und DB-Verbindungen aufbauen muss). Wenn es eher um eine kleine Geschichte oder einmalige Sache handelt, würde ich ein Shell-Skript schreiben, das den Kommandozeilen-Client Deiner Datenbank nutzt.
Ich persönlich würde versuchen Perl zu vermeiden, weil Perl zwar mit dem CPAN ein reichhaltiges Angebot an gut dokumentierten Modulen für alles Mögliche hat aber auf der anderen Seite der Code leicht schwer lesbar wird und die Unterstützung für Objektorientierung schlecht ist. Python und Ruby sind da deutlich besser. Ciao robert |
||||
(Themenstarter)
![]() Anmeldungsdatum: Beiträge: 132 |
Hallo erstmal Danke für die ersten Ideen. Als Datenbank liegt eine mysql dahinter. Ich brauche nur 1 Abfrage, die mir eine Variable liefert. Diese muss ich auswerten und dann ncoh eine Query die was in die Datenbank schreibt. Ein Shell Script währe meine erste Wahl, weil es mehr eine einmalige Sache ist und wenn es läuft keine weitere Beachtung mehr bekommt. |
||||
Projektleitung
Anmeldungsdatum: Beiträge: 13192 |
Ja, dann kannst Du so etwas tun:
siehe http://dev.mysql.com/doc/refman/5.7/en/mysql-command-options.html Du musst die Optionen natürlich so auswählen, dass nur der Wert ausgegeben wird und nicht etwa die Spaltennamen oder anderes.
Ähnlich wie oben. Das Kommando würde man ggf. mit doppelten Anführungsstrichen quoten, damit man aus der Shell einen Wert übergeben kann.
👍 Ciao robert |
||||
(Themenstarter)
![]() Anmeldungsdatum: Beiträge: 132 |
brauche nochmal hilfe script sieht jetzt so aus:
Die Ausgabe ist: Variable: sendungsnummer 8 Das heisst für mich, er Verbindet zur Datenbank und holt den richtigen Wert, aber dann ist der Inhalt nicht nur die 8 die ich brauch sondern noch sendungsnummer. wie kann cih das unterdrücken? |
||||
![]() Anmeldungsdatum: Beiträge: 7174 Wohnort: Wolfen (S-A) |
Am besten natürlich, indem Du die DB-Abfrage anpasst. Sonst, notfalls mit myVar=$(echo "SELECT sendungsnummer FROM bestellungen where id=40170" | mysql -u xxx -pxxx -P 111 datenbank | grep -o '[0-9]*' ) LG, track |
||||
Projektleitung
Anmeldungsdatum: Beiträge: 13192 |
Warum nutzt Du nicht die Option "--execute" wie vorgeschlagen? Die Pipe ist doch völlig überflüssig.
Bitte schau mal auf den Link, den ich vorher gepostet habe:
Ich habe irgendwie das Gefühl, dass Du ignorierst, was Dir hier vorgeschlagen wird... Ciao robert |