On Fri, 23 Nov 2001, Rene Engelhard wrote:
Hier die v.1.5 mit den guten Anregungen von Alex und David. Ich habe das ein wenig verändert und einiges ausgelassen. Auch habe ich manches mit Kommandooptionen geregelt (z.B Komp. an/aus)
Hm. Du wertest die Optionen ein wenig umstaendlich aus, die sollte man eher "auf einen Rutsch" (also in einem case) auswerten... ,----[ oldmails.sh ] | #!/bin/bash [..] | MAILDIR=/home/"$LOGNAME"/Mail | ARCHIVMAILDIR=/home/"$LOGNAME"/Mail-Archiv Flasch. (auch wenn's funktioniert). Richtig: MAILDIR="/home/${LOGNAME}/Mail" ARCHIVMAILDIR="/home/${LOGNAME/Mail-Archiv" | # if --help or -h is given to this script print a help meassage | case $1 in | --help|-h) [Hilfetext] | # exit this script due we do not have to do anything here | exit 0 | ;; | *) | ;; | esac Hier ist besser eine Funktion oder Variable angebracht: usage() { [Hilfetext] } oder usage="USAGE: `basename $0` [OPTIONEN] Hilfetext "; und dann: case "$1" in ## ja, hier sollte man quoten! -h|--h*) usage(); exit 0; # oder echo "$usage"; exit 0; ;; | DAY="`date +'%d'`" | case $DAY in | 01) | ;; | *) | # exit because the script was not started on first of a month | # and due to this this makes less sense to run this script | echo "This script is designed to run on the first of each month" | echo "We recommend to put it in your crontab like this:" | echo "1 0 1 * * /path/to/this/script" | exit 1 | ;; | esac Das sollte vor das case "$1". | # create directory to save the archives if it was not created yet | if ! test -d $ARCHIVMAILDIR | then | mkdir $ARCHIVMAILDIR | fi ok. Auch wenn mir mein Einzeiler besser gefaellt ;) Wozu hattest du im folgendem immer noch 2 for-Schleifen? | cd $MAILDIR | for mbox in *; | do | # if the mailfolder does not have his own directory in the | # archive yet, we create it | if ! test -d "${ARCHIVMAILDIR}/${mbox}" | then | # for every mailfolder in ~/Mail we want a extra folder in | # the archive | mkdir "${ARCHIVMAILDIR}/${mbox}" | fi | case $1 in | --compress|-c) | # move the mailfolder to his archive location ... | mv ${mbox} "${ARCHIVMAILDIR}/${mbox}/${mbox}-$DATE" | # ... and compress it with gzip | gzip -9 "${ARCHIVMAILDIR}/${mbox}/${mbox}-$DATE" | ;; | *) | # only moving the mailfolder to his archive location | mv ${mbox} "${ARCHIVMAILDIR}/${mbox}/${mbox}-$DATE" | ;; | esac | done So, hier machst du weiter mit der Optionen Auswertung... Naja. Ich wuerde das Script also so schreiben: COMPRESS="gzip -v9" DO_COMPRESS="no" ## default festlegen [DEF. von usage, s.o.] [test auf's Datum, ggfs. exit, s.o.] case "$1" in -h|--h*) usage; exit 0;; -c|--c*) DO_COMPRESS="yes";; *) DO_COMPRESS="no";; esac cd "$MAILDIR" for mbox in *; do ## Kommentare hab ich weggelassen und ich nehm wieder den Einzeiler mboxdir="${ARCHIVMAILDIR}/${mbox}" ## quoten nicht vergessen [1] test -d "${mboxdir}" || mkdir -p "${mboxdir}" mv "${mbox}" "${mboxdir}/${mbox}-${DATE}" if test "x$COMPRESS" = "xyes"; then $COMPRESS "${mboxdir}/${mbox}-${DATE}" fi done Insbesondere halte ich es fuer uebersichtlicher nur eine Schleife ueber alle Mailboxen zu haben... -dnh [1] Die extra Variable ist primaer wg. der Zeilenlaenge -- So wear a black tie. And a black armband. And if PHB asks you who died, say something like "my respect for you as a manager". -- Tanuki