bash: Muster eines Eingabeparameter prüfen
Ich hätte da noch ein Problem zur Überprüfung der übergebenen Parameter in einem Shellscript. Wie erkanne ich ob ein Parameter die Form "Zahl-Zahl" hat, also zB 3-6 oder 14-25. Das müßte doch in der Art ähnlich der Abfrage einer Zahl if expr "$1" : '[0-9]*$' > /dev/null; then .. machbar sein. Vielen Dank! Al
Hallo, Am Thu, 11 Dec 2003, Al Bogner schrieb:
Ich hätte da noch ein Problem zur Überprüfung der übergebenen Parameter in einem Shellscript.
Wie erkanne ich ob ein Parameter die Form "Zahl-Zahl" hat, also zB 3-6 oder 14-25.
Das müßte doch in der Art ähnlich der Abfrage einer Zahl if expr "$1" : '[0-9]*$' > /dev/null; then .. machbar sein.
expr "$1" : '[0-9]\+-[0-9]\+$' Siehe 'man 7 regex'. -dnh -- [Überlange Sig] Dir ist schon klar, das 4 Zeilen genug sind? 4*4 Zeilen ist eine Kriegserklaerung. [Wolfgang Weisselberg in suse-linux]
Am Donnerstag, 11. Dezember 2003 19:20 schrieb David Haller:
Am Thu, 11 Dec 2003, Al Bogner schrieb:
Ich hätte da noch ein Problem zur Überprüfung der übergebenen Parameter in einem Shellscript.
expr "$1" : '[0-9]\+-[0-9]\+$'
So klappt es if expr "$1" : '[0-9]\+-[0-9]\+$' > /dev/null; then ... Ich schaffe es aber nicht das in eine case-Syntax zu integrieren. BTW sollte man für neue Scripts statt case eigentlich switch verwenden? Al
Hallo, Am Thu, 11 Dec 2003, Al Bogner schrieb:
Am Donnerstag, 11. Dezember 2003 19:20 schrieb David Haller:
Am Thu, 11 Dec 2003, Al Bogner schrieb:
Ich hätte da noch ein Problem zur Überprüfung der übergebenen Parameter in einem Shellscript.
expr "$1" : '[0-9]\+-[0-9]\+$'
So klappt es if expr "$1" : '[0-9]\+-[0-9]\+$' > /dev/null; then ...
Na bitte ;)
Ich schaffe es aber nicht das in eine case-Syntax zu integrieren.
Wie denn? 'case' macht keine REs. Aber ein 'case' ist ja auch nur ein if-Konstrukt. if b1; then c1; elsif b2; c2; elsif b3; c3; ... else ...; fi Statt b1 ... bn musst du eben die expr-Konstrukte verwenden: if expr "$1" : 'REGEX1'; then CMDS1; elsif expr "$1" : 'REGEX2'; CMDS2; elsif expr "$1" : 'REGEX3'; CMDS3; ... else DEFAULT_CMDS; fi Das ganze ist dann aequivalent zu einem case-Konstrukt.
BTW sollte man für neue Scripts statt case eigentlich switch verwenden?
Nein. $ switch bash: switch: command not found -dnh -- Wenn Martin Bernd wäre, dann wäre Martin Bernd und wenn Bernd Bernd wäre, dann wäre Bernd Bernd und ein Mann muß tun was ein Mann tun muß, und es waren noch Zeiten, als Manpages noch Manpages waren. [irgendeiner der Bernd's in suse-talk]
Am Donnerstag, 11. Dezember 2003 22:23 schrieb David Haller:
Aber ein 'case' ist ja auch nur ein if-Konstrukt.
if b1; then c1; elsif b2; c2; elsif b3; c3; ... else ...; fi
Daran hatte ich auch schon gedacht, mir "gefällt" von der Lesart aber "case" besser als "elsif", aber wenn es mit case nicht geht ...
BTW sollte man für neue Scripts statt case eigentlich switch verwenden?
Nein.
$ switch bash: switch: command not found
Oh, da habe ich bei man case ganz oben nicht gelesen: "Tcl Built-In Commands" Al
Al Bogner am Donnerstag, 11. Dezember 2003 21:31:
Am Donnerstag, 11. Dezember 2003 19:20 schrieb David Haller:
Am Thu, 11 Dec 2003, Al Bogner schrieb:
Ich hätte da noch ein Problem zur Überprüfung der übergebenen Parameter in einem Shellscript.
expr "$1" : '[0-9]\+-[0-9]\+$'
So klappt es if expr "$1" : '[0-9]\+-[0-9]\+$' > /dev/null; then ...
Ich schaffe es aber nicht das in eine case-Syntax zu integrieren.
Hm, wüsste ich jetzt auch nicht. Aber letztendlich ist die case-Syntax nichts anderes als eine Sonderform verschachtelter (und von der Grundlogik der Bedingung her einander gleichenden) if-then-else-Verzweigungen. Ist dann also ein wenig mehr Schreibarbeit und man darf die Übersicht nicht verlieren. -- Gruß MaxX 8-)
participants (3)
-
Al Bogner
-
David Haller
-
Matthias Houdek