Schleife

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von Janine, 26.09.2007.

  1. Janine

    Janine Eroberer

    Dabei seit:
    27.07.2007
    Beiträge:
    60
    Zustimmungen:
    0
    Hallo Jungs,

    das Script überprüft die anzahl der Dateien in dem Ordner Maximum sind 2, also wenn schon 2 vorhanden sind löscht er das älteste File und legt ein neues an. Wenn ich aber jetzt per Hand meinetwegen 4 anlege und das Script wieder ausführe löscht er nur das älteste und legt ein neues an also sind es noch 3 der soll aber bis zum maximum alle ältesten wieder löschen.

    Wie mach ich es am besten ? Mit einer while Schleife?



    Code:
    #!/bin/sh
    
    DATE=`date +%Y_%m_%d_%H_%M_%S`                  #Aktuelle Datum
    a=$(ls -lt FULL* | wc -l)                       #Anzahl der FULL-Backup Dateien
    
    if test "$a" -gt "2"                            #Backup begrenzung auf 3
    
            then
            clear
    
            echo "Maximale FULL_Backups erreicht. Älteste Backup wurde gelöscht und durch neues ersetzt."
            alt=`ls -tr FULL* | head -n1`           #Ausfindig machen des ältesten Backups
            rm $alt                                 #selbige löschen
            echo "#FULL_$DATE" > "FULL_$DATE"       #neues anlegen mit Datum im Namen
            ls -l
            df -mP|/usr/bin/awk '/hda2/{P=($2 - $3) *100/$2;printf "Noch %6.3f % verfügbarer Speicherplatz auf /dev/hda2\n",P}'
            exit
    
    
                    else
                    clear
                    echo "Backup wurde erstellt."
                    echo "#FULL_$DATE" > "FULL_$DATE"
                    ls -l
                    df -mP|/usr/bin/awk '/hda2/{P=($2 - $3) *100/$2;printf "Noch %6.3f % verfügbarer Speicherplatz auf /dev/hda2 \n",P}'
                    exit
    
    
    fi
    Wäre nett wenn wenn jemand eine Beispiellösung hat :)

    MfG Janine
     
  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 manfred, 26.09.2007
    manfred

    manfred Jungspund

    Dabei seit:
    27.08.2007
    Beiträge:
    10
    Zustimmungen:
    0
    Hallo Janine,

    hab mal meine Ideen zu deiner Fragen in dein Script
    reingebastelt. Nach dem Prinzip sollte es gehen,
    durch die innere Schleife kriegst du im Ablauf für
    jede "zuviele" Datei eine Info angezeigt.

    Hab aber grad Win gebootet, kanns nicht testen.
    Bin auch nicht wirklich so gut, blind scripten zu können.
    Verdamme mich also nicht, wenn tippföhler drin sind.
    So wie dein Script aussieht, findest du solche ja selber
    beim austesten.

    Code:
    #!/bin/sh
    
    DATE=`date +%Y_%m_%d_%H_%M_%S`                  #Aktuelle Datum
    a=$(ls -lt FULL* | wc -l)                       #Anzahl der FULL-Backup Dateien
    IF test "$a" -gt "2"                            #Backup begrenzung auf 3
            then
               clear 
               echo "Maximale FULL_Backups ueberschritten - $a Dateien im Verzeichnis"
               echo "Ältestes Backup wird gelöscht."
               alt=`ls -tr FULL* | head -n1`           #Ausfindig machen des ältesten Backups
               rm $alt                                 #selbige löschen
               $(($a=$a-1 ))                           #Anzahl vorh Dateien um eins vermindern
               while [ test "$a" -gt "2" ]             #Backup begrenzung auf 3 testen
                    do                                 # immer wieder älteste löschen, bis nur noch 2 übrig sind
                        echo "immer noch zuviele Backups vorhanden aeltestes Backup wird gelöscht."
                        alt=`ls -tr FULL* | head -n1`           #Ausfindig machen des ältesten Backups
                        rm $alt                                 #selbige löschen
                        $(($a=$a-1 ))                           #Anzahl vorh Dateien um eins vermindern
                    done
               # wenn vorige Schleife verlassen wird, sind nunr noch 2 Dateien drin, also neue anlegen
               echo "#FULL_$DATE" > "FULL_$DATE"       #neues anlegen mit Datum im Namen
               ls -l
               df -mP|/usr/bin/awk '/hda2/{P=($2 - $3) *100/$2;printf "Noch %6.3f % verfügbarer Speicherplatz auf /dev/hda2\n",P}'
               exit
            else
               clear
               echo "Backup wurde erstellt."
               echo "#FULL_$DATE" > "FULL_$DATE"
               ls -l
               df -mP|/usr/bin/awk '/hda2/{P=($2 - $3) *100/$2;printf "Noch %6.3f % verfügbarer Speicherplatz auf /dev/hda2 \n",P}'
               exit
    fi
    
    Hoffe es hilft, manfred
     
  4. #3 Janine, 26.09.2007
    Zuletzt bearbeitet: 26.09.2007
    Janine

    Janine Eroberer

    Dabei seit:
    27.07.2007
    Beiträge:
    60
    Zustimmungen:
    0
    jede hilfe ist mir lieb soweit danke werde es gleich mal testen :)

    EDIT: hmmm klappt net ganz aber glaube der ansatz ist richtig ^^

    mal looken was noch so für Vorschläge kommen :)
     
  5. buli

    buli Debianator

    Dabei seit:
    16.09.2006
    Beiträge:
    789
    Zustimmungen:
    0
    Ort:
    Essen/Ruhrgebiet
    Code:
    while [ test "$a" -gt "2" ] 
    test ist doch schon mit den [ ] angegeben.

    Code:
    while [ $a -gt "2" ]
    Den Rest hab ich mir nicht so genau angesehen ;)
     
  6. #5 Gott_in_schwarz, 26.09.2007
    Gott_in_schwarz

    Gott_in_schwarz ar0

    Dabei seit:
    22.04.2007
    Beiträge:
    546
    Zustimmungen:
    0
    Ort:
    Niedersachsen
    Und 'if' statt 'IF', sowas verzeiht die case-sensitive bash einem nicht.
     
  7. #6 Janine, 26.09.2007
    Zuletzt bearbeitet: 26.09.2007
    Janine

    Janine Eroberer

    Dabei seit:
    27.07.2007
    Beiträge:
    60
    Zustimmungen:
    0
    habs gelöst code steht unten (mit max anzahl angabe)


    Aber noch eine andere kurze Frage warum...

    Code:
    #!/sh/bin
    read $a
    
    b=$($a -1)
    
    echo $b
    
    kommt da nicht 1 raus wenn ich 2 angebe also er soll einfach eingabezahl -1 ausgeben ^^ sprich bei eingabe 3 z.B. 2 x)


    Code:
    #!/bin/sh
    
    echo "Bitte Anzahl der Max FULL_BACKUPS angeben"
    
    read anz
    
    
    DATE=`date +%Y_%m_%d_%H_%M_%S`                  #Aktuelle Datum
    a=$(ls -lt FULL* | wc -l)                       #Anzahl der FULL-Backup Dateien
    
    while test "$a" -gt "$anz"                         #Backup begrenzung
    
    do
    
            echo "Maximale FULL_Backups erreicht."
            alt=`ls -tr FULL* | head -n1`           #Ausfindig machen des ältesten Backupsneues ersetzt."
            rm $alt                                 #selbige löschen
            a=$(ls -lt FULL* | wc -l)
    done
    
    
    if test "$a" -gt "$anz"                         #Backup begrenzung auf
    
            then
            clear
    
            echo "Maximale FULL_Backups erreicht. Ã
            alt=`ls -tr FULL* | head -n1`          l#Ausfindig machen des ältesten Backupsneues ersetzt."
            rm $alt                                 #selbige löschen
    
    
            echo "#FULL_$DATE" > "FULL_$DATE"       #neues anlegen mit Datum im Namen
            ls -l
            df -mP|/usr/bin/awk '/hda2/{P=($2 - $3) *100/$2;printf "Noch %6.3f % verfügbarer Speicherplatz auf /dev/hda2\n",P}'
            exit
    
    
                    else
                    clear
                    echo "Backup wurde erstellt."
                    echo "#FULL_$DATE" > "FULL_$DATE"
                    ls -l
                    df -mP|/usr/bin/awk '/hda2/{P=($2 - $3) *100/$2;printf "Noch %6.3f % verfügbarer Speicherplatz auf /dev/hda2 \n",P}'
                    exit
    
    
    
    fi
    
     
  8. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  9. #7 Gott_in_schwarz, 26.09.2007
    Zuletzt bearbeitet: 26.09.2007
    Gott_in_schwarz

    Gott_in_schwarz ar0

    Dabei seit:
    22.04.2007
    Beiträge:
    546
    Zustimmungen:
    0
    Ort:
    Niedersachsen
    Zu deiner ersten Frage:
    1. du meinst wahrscheinlich '#!/bin/sh' und nicht '#!/sh/bin', oder? 0o
    2. da sind ein paar '$'s zu viel.
    3. weiß ich gar nicht, ob 'sh' das überhaupt kann, deswegen hier mal das Beispiel in 'bash':
    Code:
    #!/bin/bash
    read a
    echo $a
    ((b = a - 1))
    echo $b
     
  10. #8 Wolfgang, 26.09.2007
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo
    Code:
    $ read -s b;# Nach Eingabe von 10
    c=$((--b));
    echo $c
    9
    
    
    Gruß Wolfgang
     
Thema:

Schleife

Die Seite wird geladen...

Schleife - Ähnliche Themen

  1. for schleife für eine Zeile

    for schleife für eine Zeile: Hallo, ich bin neu hier in diesem Forum. Evtl. kann mir ja einer von euch bei meinem Problem helfen. Ich möchte für ein entpackprogramm eine...
  2. Systemd-Projekt veröffentlicht Event-Verarbeitungsschleife

    Systemd-Projekt veröffentlicht Event-Verarbeitungsschleife: Das Systemd-Projekt hat seine selbst entwickelte Event-Verarbeitungsschleife zum stabilen Teil von libsystemd erklärt. »sd-event« steht damit auch...
  3. continue in Schleife einbauen

    continue in Schleife einbauen: Hallo alle zusammen, ich schreibe grad an einem shell script und habe folgendes Problem: Ich möchte, dass die beiden if Anweisungen (zeile...
  4. [FRAGE] Dateinamen normalisieren während sie in einer "for" Schleife sind

    [FRAGE] Dateinamen normalisieren während sie in einer "for" Schleife sind: Moin Gemeinde, ich habe ein Skript welches Emails abholt und weiterverarbeitet, manche müssen ausgedruckt werden. Nun hat sich herausgestellt...
  5. bash for schleife mit if

    bash for schleife mit if: Hey, ich krieg die nicht so hin wie ich sie gerne hätte for FOLDERNAME in $(find /home/hexenwerk/ -maxdepth 1 -type d -exec basename {} \; )...