verschachtelte case-Zweige mit /bin/sh?

XPectIT

the just
Ich habe ein Script, das den folgenden Teil enthält:
Code:
case "$#" in
   0 ) # Kein Argument.
       exit 1
       ;;
   1 ) # 1 Argument, das es zu Pruefen und auszuwerten gilt.
       # Wurde ein komplettes Datum übergeben?
       PUNKTE="`echo $1 | sed -e 's/[^/.]/ /g' | wc -w`"
       case "$PUNKTE" in
           0 ) # Es wurde kein PUNKT angegeben
	           exit 1
                 
           1 ) # Es wurde ein PUNKT angegeben
               MONAT="`echo $1 | cut -d '.' -f1`"
	       JAHR="`echo $1 | cut -d '.' -f2`"
	       SUCHSTRING="**.$MONAT.$JAHR"
	       ;;
	      
	   2 ) # Es wurden zwei PUNKTE angegeben
	       TAG="`echo $1 | cut -d '.' -f1`"
	       MONAT="`echo $1 | cut -d '.' -f2`"
               JAHR="`echo $1 | cut -d '.' -f3`"
	       SUCHSTRING="$TAG.$MONAT.$JAHR"
	       ;;
	   
	   * ) # Zuviele PUNKTE wurden angegeben
	       echo "Bitte Datumseingabe überprüfen!"
	       echo "$PUNKTE"
               exit 1
	       ;;
       esac
       ;;
esac
Egal was ich auch für Argumente übergebe, ich lande immer im "* )"-Teil.
Und die Variable $PUNKTE wird mir mit dem korrekten Wert ausgegeben.

z.B.
Code:
$ ./scriptname 03.12
Bitte Datumseingabe überprüfen!
       1

$ ./scriptname 03.12.2003
Bitte Datumseingabe überprüfen!
       2

$ ./scriptname 12
Bitte Datumseingabe überprüfen!
       0

Was ist eigentlich will:
Das dieses Script mit verschiedenen Argumenten gestartet werden kann, die ich entsprechend Auswerte. Aufgrund dieser Argumente soll eine Datei nach $SUCHSTRING durchsucht werden. Und je nachdem, wie die die Argumente sind, soll sich $SUCHSTRING anpassen.
Da das ganze auf dem Router läuft ist keine Bash, kein Perl und garnichts sonst installiert.
Unter Linux gehts problemlos, warum auch immer, aber bei meinem FreeBSD 5.2.1 bockt es an o.a. case-Zweig.

Endergegnis:
Eine Übersicht der ISDN-Verbindungen aus der Datei /var/log/isdnd.acct gezogen.

Hat jemand ne Idee wie ich das zum laufen bekomme?
 
Mit der Verschachtelung hats wenig zu tun. Ich habe jetzt 2 getrennte case-Zweige und es geht immernoch nicht.
Nur fehlt mir jetzt total der Grund warum es nicht geht.
 
ersetz mal :

Code:
PUNKTE="`echo $1 | sed -e 's/[^/.]/ /g' | wc -w`"

durch

Code:
PUNKTE="`echo $1 | sed -e 's/[^/.]/ /g' | wc -w | tr -d ' '`"

oder auch

Code:
PUNKTE="`echo $1 | sed -e 's/[^/.]/ /g' | wc -w | awk '{print $1}'`"

um die Leerzeichen vom 'wc -w' wegzubekommen, dann funzt es auch :)
 
Zurück
Oben