Anzeige:
Ergebnis 1 bis 5 von 5

Thema: Scriptsprachen FAQ

  1. #1
    Registrierter Benutzer
    Registriert seit
    12.08.2001
    Beiträge
    64

    Lightbulb Scriptsprachen FAQ

    Ich habe die Anfrage auf einen FAQ-Beitrag fuer dieses Forum bekommen und find das ist ne gute Idee
    also - dies ist er

    jeder der moechte, kann einen Beitrag hierzu schreiben, nur bitte auch nur Fragen & Antworten die auch wirklich oefter vorkommen, danke

    ps.: ich hab grad net soviel Zeit, ich werd bei Gelegenheit auch mal was dazu schreiben...
    Geändert von ponzellus (21-10-2002 um 12:23 Uhr)

  2. #2
    Registrierter Benutzer
    Registriert seit
    30.12.2001
    Beiträge
    444
    Wie bekomme ich die IP-Adresse(IPv4) des Rechners(und nur diese) in eine Variable?
    Code:
    DEVICE="eth0"
    IP_ADRESSE=$(/sbin/ifconfig $DEVICE| grep "inet Adresse"| awk '{ print $2}' |awk -F: '{print $2}')
    Wie kann ich die Anzahl der gesendeteten/empfangen Bytes aus ifconfig herausfiltern?

    Aus der Shell heraus mit etwas Hilfe von Perl.
    Code:
    DEVICE="ppp0"
    RX_BYTES=$(ifconfig $DEVICE| perl -e 'for(<>) { /RX bytes:([0-9]+).*TX bytes:([0-9]+)/ and \
                            $RX+=$1} print "$RX" ')
    TX_BYTES=$(ifconfig $DEVICE| perl -e 'for(<>) { /RX bytes:([0-9]+).*TX bytes:([0-9]+)/ and \
                            $TX+=$2;} print "$TX" ')
    Wie kann ich ein Passwort verschlüsseln?

    Wie kann ich ein Passwort verschlüsseln(mit crypt) das der Benutzer eingibt? Danach soll es in die Systemdateien eingetragen werden können.

    http://www.mrunix.de/forums/showthre...threadid=29834
    http://www.mrunix.de/forums/showthre...threadid=13774

    Hinweis: Das Passwort in /etc/shadow oder /etc/passwd ist 13-stellig, das verschlüsselte Passwort aber nur 11-stellig. Der 2-stellige Salt-Key der beim verschlüsseln verwendet wird vor das Passwort gesetzt!
    Geändert von fork (21-10-2002 um 18:50 Uhr)

  3. #3
    Registrierter Benutzer
    Registriert seit
    29.12.2001
    Ort
    Berlin
    Beiträge
    231

    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
    Geändert von tomes (23-10-2002 um 19:54 Uhr)
    ************************************************
    Man(n oder Frau) muss nicht alles wissen,
    Man(n oder Frau) muss nur wissen wo es steht !
    ************************************************
    http://www.sandtom.net
    ICQ 176436259

  4. #4
    Registrierter Benutzer
    Registriert seit
    06.10.2002
    Beiträge
    5
    Summierung des Down- und Uploadvolumens

    Na, da mach ich doch auch mit. Ich hatte von meinem Provider ein Mail bekommen, dass ich auf mein Downloadverhalten acht geben soll. Bei der Rückfrage wie, hat man mir gesagt, dass Linux von ihnen nicht unterstützt wird. Deshalb mußte ich mir notgedrungen, mit einer super Hilfe von Hans-Georg Normann, selbst ein Script basteln.

    Es liegt bei mir in /etc/init.d, und ich führe es beim Starten und Beenden aus. Es handelt sich bei mir um Gentoo-Linux (#!/sbin/runscript).

    Code:
    #!/sbin/runscript
    
    depend() {
            need net
    }
    
    start() {
            ebegin "Starting SumTraffic "
            datum=$(date +%d.%m.%Y)
            monat=$(date +%m%Y)
    
            #Überprüfung, ob die datei /var/log/updown existiert, falls nicht = anlegen
            if [ ! -f /var/log/updown ] ; then
                    echo 0 > /var/log/updown
                    echo die datei /var/log/updown wurde angelegt
            fi
    
            #Überprüfung, ob die datei /var/log/monatupdo existiert, falls nicht = anlegen
            if [ ! -f /var/log/monatupdo ] ; then
                    echo $monat > /var/log/monatupdo
                    echo die datei /var/log/monatupdo wurde angelegt
            fi
    
            #Überprüfung des monats
            if [ `cat /var/log/monatupdo` != $monat ] ; then
                    sum=0; for i in `cat /var/log/updown`; do ((sum+=i));done;
                    mv /var/log/updown /var/log/$datum.UPDOWN
                    echo 0 > /var/log/updown
                    echo Die Datei wurde unter dem Namen $datum.UPDOWN weggesichert
                    echo $datum: Transfervolumen des vergangenen Monats: $sum MB ';)'
    
            #standard
            else
                    sum=0; for i in `cat /var/log/updown`; do ((sum+=i));done;
                    echo $datum: bisher heruntergeladen: $sum MB. verbleibend: $[10240-$sum] MB
            fi
            eend $? "Failed to start SumTraffic"
    }
    stop() {
            ebegin "Stopping SumTraffic "
    
            #generelle variablen definieren
    
            datum=$(date +%d.%m.%Y)
            monat=$(date +%m%Y)
    
            #Wert für die monatsüberprüfung in textdatei schreiben
            echo $monat > /var/log/monatupdo
    
            #up und downloadvolumen ermitteln
            up=$(/sbin/ifconfig eth0 | grep "RX bytes" | gawk '{print $6}' | gawk -F':' '{print $2}');up=$[$up/1048576]
            down=$(/sbin/ifconfig eth0 | grep "RX bytes" | gawk '{print $2}' | gawk -F':' '{print $2}');down=$[$down/1048576]
    
            #prüfen, ob eventuell die summe von up und download > 0
            summe=$[$up+$down]
            if [ $summe = 0 ] ; then
                    up=$(/sbin/ifconfig eth0 | grep "RX bytes" | gawk '{print $6}' | gawk -F':' '{print $2}')
                    down=$(/sbin/ifconfig eth0 | grep "RX bytes" | gawk '{print $2}' | gawk -F':' '{print $2}')
                    summe=$[$up+$down];summe=$[$summe / 1048576]
                    echo $summe >> /var/log/updown
                    up=0;down=$summe
    
            #falls summe von up und download immer noch < 0 dann 1 mb annehmen
                    if [ $summe = 0 ] ; then
                            up=0;down=1
                            echo $down >> /var/log/updown
                    fi
    
            #ansonsten die tatsächlichen werte übernehmen
            else
                    echo $down >> /var/log/updown
                    echo $up >> /var/log/updown
            fi
    
            sum=0; for i in `cat /var/log/updown`; do ((sum+=i));done;
    
            #zusammenfassung ausgeben
            echo $datum: heute: $[$up+$down] MB insgesamt: $sum MB verbleibend: $[10240-$sum] MB
            eend $?
    Analog dazu habe ich mir noch ein kleines ausführbares Script gebastelt, welches ich mit fcron im 15 Minuten Takt ausführen lasse. Die Daten werden mittels Root-Tail am Desktop angezeigt:

    Code:
    datum=$(date +%d.%m.%Y)
    
    up=$(/sbin/ifconfig eth0 | grep "RX bytes" | gawk '{print $6}' | gawk -F':' '{print $2}');up=$[$up/1048576]
    down=$(/sbin/ifconfig eth0 | grep "RX bytes" | gawk '{print $2}' | gawk -F':' '{print $2}');down=$[$down/1048576]
    
    sum=0; for i in `cat /var/log/updown`; do ((sum+=i));done;
    echo $datum: down: $down MB up: $up MB heute: $[$up+$down] MB >> /var/log/kern.log
    echo $datum: insgesamt: $[$sum+$down+$up] MB verbleibend: $[10240-$sum-$down-$up] MB >> /var/log/kern.log
    Mir ist klar, dass man die Scripte noch mit Variablen usw. ausschmücken könnte, doch für mich und meinem normalen Hausgebrauch, reichen sie, wie sie sind .. btw, mein Downloadlimit ist 10 GB, deshalb 1048576.

    [edit]Ich habe noch eine Überschrift gesetzt und die quotes mit code ersetzt[/edit]
    Geändert von querus (07-12-2002 um 12:53 Uhr)

  5. #5
    Registrierter Benutzer
    Registriert seit
    29.12.2001
    Ort
    Berlin
    Beiträge
    231

    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
    Geändert von tomes (15-01-2003 um 20:47 Uhr)
    ************************************************
    Man(n oder Frau) muss nicht alles wissen,
    Man(n oder Frau) muss nur wissen wo es steht !
    ************************************************
    http://www.sandtom.net
    ICQ 176436259

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •