* Michael Hoeller schrieb am 25.Aug.2001:
Wenn die Datei in $1 existiert und älter als 7 Tage ist dann soll diese nach TMPDIR verschoben und der (backup)level auf null gesetzt werde. Ansonsten soll der Wochentag den level angeben.
Hier mein Versuch der nicht tut, kann mir jemand helfen? Leider bin ich mit man bash, man date, man ... nicht so ganz zum Ziel gekommen.
if [ -r $1] && [find $1 -mtime +7 \; ]; then
Nehmen wir mal den ersten Teil: [ -r $1] Zuerst wird hier nicht auf die Existenz, sondern auf die Lesbarkeit getestet. Das ist nicht unbedingt das Gleichen, eine Datei könnte sehr wohl existieren, aber nicht lesbar sein. Dann sollte verstanden werden, daß [...] keine syntaktische Rafinesse ist, sondern ein eigener Befehl, der auch test -r $1 geschrieben werden könnte. Allerdings müßte es [ -r $1 ] heißen. Der Blank zwichen $1 und ] ist notwendeig. Wenn $1 existiert und lesbar ist, geht es nach dem && weiter, ansonsten schlägt das if schon hier fehl und es wird der else-Teil ausgeführt. Ist das so gewollt? Wenn $1 nicht existiert, oder nicht lesbar ist, dann wird level auf dem jeweiligen Wochentag gesetzt? Wenn aber die Datei existiert und lesbar ist, dann geht es nach dem && weiter. Was soll das [...] hier bewirken? Wie gesagt, [...] ist ein eigener Befehl, wäre es zumindest, wenn da [ find ... also mit einem Blank danach stände. Hier sucht die shell nach einem Befehl [find, wird ihm aber wahrscheinlich nicht finden. Wohlbemerkt [find und nicht find. stände da aber [ find ... so würde das auch keinen Sinn ergeben. find würde nicht als Befehl angesehen, sondern als erstes Argument von [ ... ] resp. test, was ja ein Synonym zu [ ... ] ist, interpretiert. Du müßtes find in ` setzen. ` und nicht '. Allerdings muß das \; weg. Das gehört zum -exec im find. Aber -exec benutzt Du gar nicht. Richtig wäre [ `find $1 -mtime +7` ] Beachte die Leerzeichen nach [ und vor ]. Vor [ muß auch eins stehen, denn wie gesagt [ ist ein eigeständiger Befehl, der unter anderem folgende Syntaxregel hat: Gibt es genau ein Argument, so wird wahr zurückgegeben, gibt es gar kein Argument, so wird falsch zurückgegeben. Nun gibt find genau ein Argument, nämlich $1 zurück, wenn die mtime älter als 7 Tage ist. Dann ist die Aussage wahr und zusammen, mit dem ersten Teil, der auch wahr sein muß, sonst würde das find gar nicht ausgeführt, ist insgesammt die Bedingung des if wahr und der then-Teil wird ausgeführt. Wenn umgekehrt die Datei jünger als 7 Tage ist, dann gibt find nichts zurück und [ ... ] wird dadurch unwahr und damit auch die Bedingung des if, es wird der else-Teil zurückgegeben. Das ganze verhält sich aber nur so, wenn in $1 nur ein Wort steht, das heißt, im Namen der Datei kein Blank auftaucht. Sollte es doch so sein, so muß noch was mehr gemacht werden: if [ "$1" ] && [ "`find \"$1\" -mtime +7`" ] then Daran erkennt man wie blöde es ist, wenn eine Datei ein Leerzeichen enthalten kann. Man sollte einerseits damit rechnen, das es so sein könnte, andererseits tunlichst vermeiden, daß eine Datei ein Leerzeichen enthält, denn es könnte sein, daß irgendjemand irgendwo nicht ganz aufgepaßt hat. So nun zum then-Teil selber:
mv $1 TMPDIR
Meinst DU TMPDIR? Oder nicht mehr $TMPDIR? Soll doch bestimmt eine Variable sein, dann muß es $TMPDIR heißen. Bei der bash wird eine Variable aufgerufen indem man ein $ davor setzt. Bei der Definition der Variablen darf das $ nicht davor stehen. VAR=irgendwas echo $VAR dann bekomst Du irgendwas. Mit echo VAR bekommst Du das Wort VAR ausgegeben und nicht den Inhalt der Variablen. Mit $VAR=irgendwas bekommst Du eine Fehlermeldung. So wie das da oben steht, wird die Datei in TMPDIR umbenannt. Also nicht nach dem Inhalt der Variablen TMPDIR, sondern die Datei wird TMPDIR heißen, bzw. in das Verzeichnis TMPDIR gelegt, falls es im aktuellen Verzeichnis ein solches Unterverzeichnis gibt. Ich gehe mal davon aus, daß das so nicht gewollt ist.
level=0
Das war noch vom then-Teil, und jetzt kommt der else-Teil:
else level= date +%w fi
Der Variablen level wird der heutige Wochentag zugewiesen? Ist das richtig? Dir ist bewußt, daß der Sonntag die Nummer 0 erhält? Sonntags unterscheidet sich damit das Ergebnis nicht, egal wie alt die Datei ist. Bernd -- LILO funktioniert nicht? Hast Du /etc/lilo.conf verändert und vergessen, lilo aufzurufen? Ist Deine /boot-Partition unter der 1024 Zylindergrenze? Bei anderen LILO Problemen mal in der SDB nachschauen: http://localhost/doc/sdb/de/html/rb_bootdisk.html |Zufallssignatur 6