Mit Perl auf eine mysql Datenbank
In einer mysql- Datenbank eine Datensatz updaten oder neu Datensatz schreiben
#!/bin/usr/perl -w
#
use DBI;
use DBD::mysql;
###########
my $DB = "Datenbankname";
my $user = "Username";
my $passwd = "Password";
my $table = "Name der Tabelle";
my $HILFE = "1";
# Variablen wo nach gesucht werden soll
my $DATUM = "23 Okt 2002";
my $NAME = "Hugo";
# connecten der Datenbank
my $dbh=DBI->connect("dbi:mysql:$DB:", "$user", "$passwd") or die "kann nicht auf datenbank zugreifen\n";
# Abfrage stellen
my $sth=$dbh->prepare("select * from $table where datum='$DATUM' and name='$NAME'");
$sth->execute();
# die gefundenen Datensaetze Zeile fuer Zeile auslesen
while(my $href=$sth->fetchrow_hashref())
{
# pruefen ob es den Datensatz so schon gibt
if($href->{"datum"} eq $DATUM && $href->{"name"} eq $NAME)
{
# wenn ja Hilfs-Variable auf 0 setzen und Datensatz updaten
$HILFE = "0";
$dbh->do("update $table SET anzahl=anzahl+1 where name='$NAME' and datum='$DATUM'");
}
}
# Abfrage beenden
$sth->finish();
# Wenn nicht kein update erfolgte, steht die Hilfs-Variable noch auf 1 und somit wird ein neuer Datensatz geschrieben
if($HILFE == "1") { $dbh->do("insert into $table (datum,anzahl,name) values ('$DATUM','1','$NAME')"); }
}
$dbh->disconnect();
--------------------------------------------
Eine einfache Abfrage der Datenbank
#!/bin/usr/perl -w
#
use DBI;
use DBD::mysql;
###########
my $DB = "Datenbankname";
my $user = "Username";
my $passwd = "Password";
my $table = "Name der Tabelle";
########
# connecten der Datenbank
my $dbh=DBI->connect("dbi:mysql:$DB:", "$user", "$passwd") or die "kann nicht auf datenbank zugreifen\n";
# Abfrage
my $sth=$dbh->prepare("select * from $table");
$sth->execute();
# Alles Zeile fuer Zeile ausgeben
while(my $href=$sth->fetchrow_hashref())
{
foreach my $k (keys %$href) { print $href->{"$k"}," "; }
print "\n";
}
# Abfrage beenden
$sth->finish();
# Verbindung beenden
$dbh->disconnect();
------------------------------------------
Brauchte das Ganze fuer die Statistik unseres Online Virenscanner.
T;o)Mes
Ein kleines Perl Beispiel
mit lesenden oeffnen und schreiben in Files, suchen und ersetzen usw.
Nur zur Anregung und natuerlich zum Gebrauch ;)
Ausserdem als "Schmackerle" --> wie installiere ich schnell mal benoetigte Perl-Pakete von der Konsole aus nach ;) ;) ;)
Code:
#!/usr/bin/perl -w
#
use strict;
use File::Find;
use File::Basename;
use Net:: DNS; #<-- Achtung Leerstelle zwischen den Doppelpunkt und DNS enfernen
###############
# Bitte hier den Path anpassen,
# wo das Firewall Script liegt
my $firewall = "/home/tom/firewall.sh";
###############
my $host = $ARGV[0];
my $search = "Kernelip=";
my ($alte_ip,$neue_ip);
###############
# alte IP auslesen aus der "firewall.sh"
open(AIP,"<$firewall");
foreach(<AIP>){
if($_ =~ /$search.*/){
$_ =~ s/^Kernelip\=\"//g;
$_ =~ s/\"\s$//g;
$alte_ip = $_;
}
}
close(AIP);
# "neue" IP holen
my $res = Net:: DNS::Resolver->new; # siehe oben
my $query = $res->search($host);
if ($query) {
foreach my $rr ($query->answer) {
next unless $rr->type eq "A";
$neue_ip = $rr->address;
}
}
# Falls keine IP, Fehlermeldung und Beenden
else {
print "query failed: ", $res->errorstring, "\n";
exit;
}
# Nachschauen ob sich IP geaendert hat
# wenn ja alte IP gegen die neue IP in "Firewall-Script" tauschen
# und Firewall neustarten
if($alte_ip eq $neue_ip){
print "IP ist die selbe \n";
}
else{
print "IP hat sich geaendert \n";
open(FW,"<$firewall");
open(TFW,">/tmp/firewall");
foreach(<FW>){
if($_ =~ /$search/){ print TFW "Kernelip=\"".$neue_ip."\"\n"; }
else { print TFW $_; }
}
close(TFW);
close(FW);
# Verschiebe tmp-File, mache sie ausfuehrbar und starte sie
`mv /tmp/firewall $firewall`;
system("chmod 700 $firewall");
system("$firewall");
}
exit 0;
Damit dieses Script leauft, muessen sich die Pakete Net:: DNS, File::Find und File::Basename auf dem Rechner befinden.
Falls sie nicht da sind (Fehlermeldung beim starten des Scripts), kann man sich diese "ganz" einfach installieren.
Und zwar machen ich das wie folgt:
# perl -MCPAN -e shell
Falls das erste mal Aufgerufen, einfach bei der ersten Frage no eingeben.
Die CPAN-Shell wird dann automatisch inizialisiert ! Man kann auch yes eingeben und ein paar Fragen beantworten, dies sollte aber nur jemand machen der sich ein wenig mit Linux und Perl auskennt.
Danach bekommt man eine CPAN-Shell
cpan>
jetzte nur noch ein -->
cpan> install File::Find
und das Pakete wird installiert.
Viel Spass ;)
T;o)Mes
P.S.: Falls jemand einen Fehler oder eine Verbesserung sieht, bitte melden ;)