Schleife

J

Janine

Eroberer
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
 
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
 
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 :)
 
Zuletzt bearbeitet:
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 ;)
 
Und 'if' statt 'IF', sowas verzeiht die case-sensitive bash einem nicht.
 
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
 
Zuletzt bearbeitet:
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
 
Zuletzt bearbeitet:
Hallo
Code:
$ read -s b;# Nach Eingabe von 10
c=$((--b));
echo $c
9

Gruß Wolfgang
 

Ähnliche Themen

Skript soll nicht doppelt laufen... kill pkill pid cron

Verschlüsseltes Backup-Script mit rsync

verzeichniss suche funktioniert nicht

Zeilenweise suchen, löschen und ersetzen / Inhalt einfügen

skript zum löschen doppelter dateien

Zurück
Oben