Mit Bash-Skript einen Datensatz auslesen?

Dieses Thema im Forum "SQL und Datenbanken" wurde erstellt von flugopa, 24.05.2009.

  1. #1 flugopa, 24.05.2009
    flugopa

    flugopa Der lernwillige

    Dabei seit:
    27.05.2006
    Beiträge:
    739
    Zustimmungen:
    0
    Ort:
    München
    Bin gerade dabei ein paar Schritte mit MySQL zu unternehmen.
    Das auslesen von Datensätzen per Hand funktionniert.
    Wie kann ich aber einen Datensatz per Skript auslesen?
    Ein sqldump erstellen und dann auslesen (greppen) finde ich nicht optimal.

    Code:
    Mysql-Ver. 5.0.77
    Code:
    mysql> show tables;
    +---------------------+
    | Tables_in_menagerie |
    +---------------------+
    | event               | 
    | haustier            | 
    | pet                 | 
    +---------------------+
    3 rows in set (0.00 sec)
    
    mysql> DESCRIBE event;
    +--------+--------------+------+-----+---------+-------+
    | Field  | Type         | Null | Key | Default | Extra |
    +--------+--------------+------+-----+---------+-------+
    | name   | varchar(20)  | YES  |     | NULL    |       | 
    | date   | date         | YES  |     | NULL    |       | 
    | type   | varchar(15)  | YES  |     | NULL    |       | 
    | remark | varchar(255) | YES  |     | NULL    |       | 
    +--------+--------------+------+-----+---------+-------+
    4 rows in set (0.00 sec)
    #Datenbank-Quelle: SUN
    mysql> select * from event;
    +----------+------------+----------+-----------------------------+
    | name     | date       | type     | remark                      |
    +----------+------------+----------+-----------------------------+
    | Fluffy   | 1995-05-15 | litter   | 4 kittens, 3 female, 1 male | 
    | Buffy    | 1993-06-23 | litter   | 5 puppies, 2 female, 3 male | 
    | Buffy    | 1994-06-19 | litter   | 3 puppies, 3 female         | 
    | Chirpy   | 1999-03-21 | vet      | needed beak straightened    | 
    | Slim     | 1997-08-03 | vet      | broken rib                  | 
    | Bowser   | 1991-10-12 | kennel   | NULL                        | 
    | Fang     | 1991-10-12 | kennel   | NULL                        | 
    | Fang     | 1998-08-28 | birthday | Gave him a new chew toy     | 
    | Claws    | 1998-03-17 | birthday | Gave him a new flea collar  | 
    | Whistler | 1998-12-09 | birthday | First birthday              | 
    +----------+------------+----------+-----------------------------+
    10 rows in set (0.00 sec)
    
    Code:
    #!/bin/bash
    ...
    echo "Name: $name wurde am ...."
    ...
    
    Evtl. mit PHP?
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 bitmuncher, 24.05.2009
    bitmuncher

    bitmuncher Der Stillgelegte

    Dabei seit:
    08.05.2007
    Beiträge:
    3.171
    Zustimmungen:
    0
    Ich persönlich bevorzuge ja Perl mit dem Modul DBIx::DWIW für's MySQL-Handling auf der Konsole. PHP hat imo nichts auf der Konsole zu suchen. Das ist eine Webscripting-Sprache und macht erfahrungsgemäss auf der Konsole nur Probleme, von der schlechten Performance mal ganz abgesehen.

    Aber zur Not geht das auch mit der Bash. Siehe dazu auch 'man mysql'

    Code:
           You can execute SQL statements in a script file (batch file) like this:
    
              shell> mysql db_name < script.sql > output.tab
    Den Output kannst du dann mit sed, awk & Co. weiterverarbeiten.
     
  4. #3 sim4000, 24.05.2009
    sim4000

    sim4000 Lebende Foren Legende

    Dabei seit:
    12.04.2006
    Beiträge:
    1.933
    Zustimmungen:
    0
    Ort:
    In meinem Zimmer
    Ich habe mal eine Zeit lang den Speicherverbrauch von meinem vServer geloggt, um zu sehen ob dieser ausreicht. Das habe ich so gemacht:
    Code:
    #!/bin/bash
    
    -- snip --
    
    echo "insert into ram_average set date=NOW(), ram='$ram', swap='$swap'" | mysql -u $user -p$password $dbname
    Das könnte man auch umgekehrt machen. Also auslesen, und nicht eingeben.
    Code:
    #!/bin/bash
    RESULT=$(echo "select * from foo" | mysql -u $user -p$password $dbname)
    Und das müsste man halt mit awk, sed, usw weiter verarbeiten.
     
  5. #4 bitmuncher, 24.05.2009
    bitmuncher

    bitmuncher Der Stillgelegte

    Dabei seit:
    08.05.2007
    Beiträge:
    3.171
    Zustimmungen:
    0
    Das wäre dann die "Umkehrung" des Beispiels aus der Manpage. :)
     
  6. #5 flugopa, 24.05.2009
    Zuletzt bearbeitet: 24.05.2009
    flugopa

    flugopa Der lernwillige

    Dabei seit:
    27.05.2006
    Beiträge:
    739
    Zustimmungen:
    0
    Ort:
    München
    Hallo sim4000;

    vielen Dank für Deine Unterstützung.

    Das Ergebnis enthält noch Fehler.
    z.B: 1998-08 zeigt alle Einträge von 1998

    Code:
    #!/bin/bash
    echo -e "\nWelcher Begriff wird gesucht? \c"
    read swort
    RESULT=$(echo "SELECT * FROM event WHERE MATCH (date) AGAINST ('+"$swort"' IN BOOLEAN MODE)" | mysql menagerie)
    echo "$RESULT"
    
    .
    .
    .
    EDIT (autom. Beitragszusammenführung) :
    .

    Hallo bitmuncher;

    hast Du evtl. paar brauchbare Perlwebseiten für mich mit praktischen Beispielen.
    (evtl. werde ich mich wieder in Perl einarbeiten)
    Was ich in Zukunft machen will: Monitorseiten nach meinen Bedarf.
    Ich weiss nicht, wo genau der Vorteil von Perl gegenüber der Bash liegt?
    Geschwindigkeit? Ist Perl schneller als Bash?

    Bitte nicht falsch verstehen. Perl ist sicherlich eine mächtige Skriptsprache, wenn man sie verstanden hat.
     
  7. #6 bitmuncher, 25.05.2009
    bitmuncher

    bitmuncher Der Stillgelegte

    Dabei seit:
    08.05.2007
    Beiträge:
    3.171
    Zustimmungen:
    0
    Wenn du eh Bash gewohnt bist, dann bleib ruhig dabei. Wirkliche Vorteile hat Perl nicht unbedingt, ausser dass man anstatt mit Programmen mit Modulen arbeitet, wodurch weniger Prozesse ge'fork't werden müssen, was etwas Rechenleistung spart und geringfügig schneller ist, was aber auf modernen Rechnern kaum noch zum Tragen kommt.

    Wenn du dir das Ganze in Perl doch mal anschauen willst, dann hilft dir die Doku zu DBIx::DWIW sicherlich weiter. Dort sind auch einige Beispiele drin. Ein einfaches Komplettbeispiel:

    Code:
    #!/usr/bin/perl
    
    use DBIx::DWIW;
    
    print "Welches Wort wird gesucht? ";
    my $input = <STDIN>; # einlesen der Eingabe von stdin
    chomp($input); # Zeilenumbruch entfernen
    
    # Verbindung zur Datenbank aufbauen
    
    # hier die entsprechenden Werte für die Verbindung zur MySQL eintragen
    my $db_user = "meinbenutzer"; # Benutzername für den Login auf der MySQL
    my $db_pass = "meinpasswort"; # Passwort für den Login auf der MySQL
    my $db_host = "localhost"; # Hostname/Domain des MySQL-Servers
    my $db_name = "meinedb"; # Datenbank, auf der wir arbeiten
    
    # Verbindung initialisieren
    my $db_conn = DBIX::DWIW->Connect(DB => $db_name, User => $db_user, Pass => $db_pass, Host => $db_host);
    
    # Query zusammenbauen
    my $query = "SELECT gewuenschtes_feld FROM meinetabelle where durchsuchtes_feld = '".$input."'";
    
    # Query absetzen und alle Ergebnisse in einem Array ablegen
    my @results = $db_conn->FlatArray($query);
    
    # durch das Array gehen und die Ergebnisse ausgeben
    foreach my $curr_result (@results) {
      print $curr_result."\n";
    }
    
    In welcher Form man sich hier die Ergebnisse ausgeben lässt, hängt davon ab, was man als Rückgabe von der DB erwartet. Ist es jeweils nur ein Tabellenfeld, dann packt man diese in ein Array. Sind es ganze Datensätze mit mehrere Tabellenfelder, kann man '$db_conn->Hashes($query)' verwenden und erwartet man nur ein einzelnes Feld als Ergebnis, dann nutzt man einfach '$db_conn->Scalar($query)'. Siehe dazu aber auch die oben erwähnte Doku.

    Da du aber ja selbst sagst, dass du kein Perl kannst, ist es sicherlich sinnvoller, wenn du bei der Sprache bleibst, die du kannst und einfach in deinem Skript den Fehler behebst. Lass dir z.B. mal das generierte Query ausgeben und gebe es so in einen MySQL-Client ein um zu sehen, ob du die gewünschten Ergebnisse bekommst. Wenn nicht, dann ist etwas am Query falsch, was dann zumeist auch offensichtlicher wird, wenn du siehst, wie das generierte Query aussieht.
     
  8. #7 flugopa, 25.05.2009
    flugopa

    flugopa Der lernwillige

    Dabei seit:
    27.05.2006
    Beiträge:
    739
    Zustimmungen:
    0
    Ort:
    München
    Hallo bitmuncher,

    Danke für die Info.

    Frage: Mit welchen Skripten (ich nehme mal an das es Perl ist) überwachst Du Deine Server?
    Temp.,Space,Error-Log,Traffic,etc.

    Kann man mit Perl feststellen welcher Benutzer gerade welches File bearbeitet bzw. geöffnet hat? (Unter Samba ist es smbstatus)
     
  9. #8 bitmuncher, 25.05.2009
    bitmuncher

    bitmuncher Der Stillgelegte

    Dabei seit:
    08.05.2007
    Beiträge:
    3.171
    Zustimmungen:
    0
    Ich monitore meine Server mit diversen Programmen. Ob ich Perl einsetze oder andere Sprachen, kommt auf die Situation an. Wenn die Überwachung durch Nagios läuft, setze ich natürlich Perl ein. Offene Dateien z.B. überwache ich aber mit einem kleinen Daemon, der ähnlich wie lsof funktioniert und durch ein Kernel-Modul versteckt wird. Änderungen an Dateien registriert ein kleines Cron-Skript, das die MD5-Summen regelmässig prüft. Performance-Daten werden mit Munin gesammelt und Programmausfälle werden von Nagios und Monit registriert.

    Aber natürlich kann man auch Perl nutzen um festzustellen, welche Dateien von wem geöffnet sind. Dafür gibt es z.B. Unix::Lsof. Auch für Samba gibt es da sicherlich was vergleichbares. Ich muss mich mit Samba glücklicherweise nicht rumärgern und kann dir daher dafür keine Lösung anbieten. Mir ist eh unklar, warum man hinter ein Windows-Netzwerk einen Samba anstatt einen Windows-Server setzen sollte. Siehe aber einfach http://search.cpan.org/search?query=samba&mode=all um zu sehen was Perl mit Samba alles machen kann.
     
  10. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  11. #9 flugopa, 26.05.2009
    Zuletzt bearbeitet: 26.05.2009
    flugopa

    flugopa Der lernwillige

    Dabei seit:
    27.05.2006
    Beiträge:
    739
    Zustimmungen:
    0
    Ort:
    München
    Hallo bitmuncher,

    ich muss gestehen das Perl sehr leise, aber doch stetig gewachsen ist.
    Mein erstes Perlprogramm (in den 90er: syslog (514 udp)) zur Erfassung von Trafficinfo mehrere Router.
    Darin besteht auch ein wesentlicher Unterschied zw. Bash und Perl: Deamon
    zu schreiben.

    Ich werde Perl im Auge behalten. Versprochen!
    .
    .
    .
    EDIT (autom. Beitragszusammenführung) :
    .

    @bitmuncher;
    Ein möglicher Grund:
    Weil das Geld für ein echten Windowsserver fehlt.
     
  12. Cyber

    Cyber .:DISTORTED:.

    Dabei seit:
    16.05.2003
    Beiträge:
    999
    Zustimmungen:
    0
    Ort:
    D -> BW -> Karlsruhe
    Die Frage gabs schonmal und ich hatte auch mal ne kleine Funktion dazu gepostet. Schau mal hier
     
Thema: Mit Bash-Skript einen Datensatz auslesen?
Besucher kamen mit folgenden Suchen
  1. datenbank bash

    ,
  2. plattenspeicher per bash-skript überwachen

    ,
  3. mysql daten auslesen konsole

    ,
  4. Bash Datenbankverbindung
Die Seite wird geladen...

Mit Bash-Skript einen Datensatz auslesen? - Ähnliche Themen

  1. Debian: Bash-Skript darf nur (weiter)laufen, wenn Bildschirmschoner an

    Debian: Bash-Skript darf nur (weiter)laufen, wenn Bildschirmschoner an: Hallo zusammen, ich bräuchte mal einen Hinweis. Ziel ist es, dass das Bash-Skript nur läuft, wenn der PC gerade nicht benutzt wird. Ich dachte...
  2. Bash-Skript Text suchen und ersetzen mit unterschiedlichen Trennzeichen

    Bash-Skript Text suchen und ersetzen mit unterschiedlichen Trennzeichen: Hallo zusammen, ich habe bereits diverse Google-Suchergebnisse durchforstet, habe jedoch nirgendwo eine verwertbare Lösung für mein Anliegen...
  3. [BASH-Skript] Wildcard gesucht zum sed-Kommando

    [BASH-Skript] Wildcard gesucht zum sed-Kommando: Hallo zusammen. Habe ein Skript erstellt, was mir auf Dauer die Arbeit erleichtern soll. ---------- #!/bin/bash #programm mkdir.sh # $1 ==...
  4. bash-Skript array decalrieren

    bash-Skript array decalrieren: Hi , ich will mir per skript und cron immer ein paar Dateien bearbeiten . Mein Problem dabei ist, das er die Variblen nicht als string...
  5. Text ersetzten per Bash-Skript

    Text ersetzten per Bash-Skript: Hallo Board, ich möchte in der smb.conf eine Zeile mit einer andere ersetzen. aus # passdb backend = ldapsam:"ldap://bar.foobar.org" ## LEAVE...