Hallo Zusammen, ich versuche gerade mit dem if aus der bash eine Variable zu überprüfen. Soweit ich es verstanden habe, geht das mit regex. Konkret: Die komplette Variable muß aus Zahlen bestehen Die erste Zahl muß eine 0 sein Die ersten beiden Zahlen dürfen nicht 00 sein Die ersten beiden Zahlen dürfen nicht 01 sein Die ersten vier Zahlen dürfen nicht 0700 sein Die ersten vier Zahlen dürfen nicht 0900 sein Geht das nur mit sed, od. kann ich das mit einem ganz normalen if und regex auch in der bash lösen? Mein Ansatz mit if [ $faxnr = [0-9] ] hat leider nicht hingehauen. Danke für jeden Tip Daniel -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Am Freitag, 9. März 2007 schrieb Daniel Bauer:
Hallo Zusammen,
ich versuche gerade mit dem if aus der bash eine Variable zu überprüfen. Soweit ich es verstanden habe, geht das mit regex.
Konkret: Die komplette Variable muß aus Zahlen bestehen Die erste Zahl muß eine 0 sein Die ersten beiden Zahlen dürfen nicht 00 sein Die ersten beiden Zahlen dürfen nicht 01 sein Die ersten vier Zahlen dürfen nicht 0700 sein Die ersten vier Zahlen dürfen nicht 0900 sein
Geht das nur mit sed, od. kann ich das mit einem ganz normalen if und regex auch in der bash lösen?
Mein Ansatz mit if [ $faxnr = [0-9] ] hat leider nicht hingehauen.
if [[ ! $faxnr =~ '^00' ]] && \ [[ ! $faxnr =~ '^01' ]] && \ [[ ! $faxnr =~ '^0[79]00' ]] && \ [[ $faxnr =~ '^0[0-9]*$' ]] then ... fi bye Jürgen -- Dr.rer.nat. Juergen Vollmer, Viktoriastrasse 15, D-76133 Karlsruhe Tel: +49(721) 92 04 87 1 Fax: +49(721) 92 04 87 2 Juergen.Vollmer@informatik-vollmer.de www.informatik-vollmer.de Internet-Telefonie: www.skype.com Benutzer: juergen.vollmer
Hi Jürgen,
From: "Dr. Jürgen Vollmer"
Am Freitag, 9. März 2007 schrieb Daniel Bauer:
[...]
Konkret: Die komplette Variable muß aus Zahlen bestehen Die erste Zahl muß eine 0 sein Die ersten beiden Zahlen dürfen nicht 00 sein Die ersten beiden Zahlen dürfen nicht 01 sein Die ersten vier Zahlen dürfen nicht 0700 sein Die ersten vier Zahlen dürfen nicht 0900 sein
[...]
if [[ ! $faxnr =~ '^00' ]] && \ [[ ! $faxnr =~ '^01' ]] && \ [[ ! $faxnr =~ '^0[79]00' ]] && \ [[ $faxnr =~ '^0[0-9]*$' ]] then ... fi
danke für die Komplettlösung ;) Verstehe ich es richtig, das es lediglich das ~ ist was die regex einleitet? Gruß Daniel -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Am Freitag, 9. März 2007 schrieb Daniel Bauer:
Hi Jürgen,
From: "Dr. Jürgen Vollmer"
Am Freitag, 9. März 2007 schrieb Daniel Bauer:
[...]
Konkret: Die komplette Variable muß aus Zahlen bestehen Die erste Zahl muß eine 0 sein Die ersten beiden Zahlen dürfen nicht 00 sein Die ersten beiden Zahlen dürfen nicht 01 sein Die ersten vier Zahlen dürfen nicht 0700 sein Die ersten vier Zahlen dürfen nicht 0900 sein
[...]
if [[ ! $faxnr =~ '^00' ]] && \ [[ ! $faxnr =~ '^01' ]] && \ [[ ! $faxnr =~ '^0[79]00' ]] && \ [[ $faxnr =~ '^0[0-9]*$' ]] then ... fi
danke für die Komplettlösung ;)
Verstehe ich es richtig, das es lediglich das ~ ist was die regex einleitet?
man bash: An additional binary operator, =~, is available, with the same precedence as == and !=. When it is used, the string to the right of the operator is considered an extended regular expres- sion and matched accordingly (as in regex(3)).
if [[ ! $faxnr =~ '^00' ]] && \
[[ ! $faxnr =~ '^01' ]] && \
btw. man könnte if [[ ! $faxnr =~ '^0[01]' ]] noch zu verkürzen bye Jürgen -- Dr.rer.nat. Juergen Vollmer, Viktoriastrasse 15, D-76133 Karlsruhe Tel: +49(721) 92 04 87 1 Fax: +49(721) 92 04 87 2 Juergen.Vollmer@informatik-vollmer.de www.informatik-vollmer.de Internet-Telefonie: www.skype.com Benutzer: juergen.vollmer
Hi,
From: "Dr. Jürgen Vollmer"
Am Freitag, 9. März 2007 schrieb Daniel Bauer:
From: "Dr. Jürgen Vollmer"
if [[ ! $faxnr =~ '^00' ]] && \ [[ ! $faxnr =~ '^01' ]] && \ [[ ! $faxnr =~ '^0[79]00' ]] && \ [[ $faxnr =~ '^0[0-9]*$' ]] then ... fi
Verstehe ich es richtig, das es lediglich das ~ ist was die regex einleitet?
man bash: An additional binary operator, =~, is available, with the same precedence as == and !=. When it is used, the string to the right of the operator is considered an extended regular expres- sion and matched accordingly (as in regex(3)).
if [[ ! $faxnr =~ '^00' ]] && \ [[ ! $faxnr =~ '^01' ]] && \
btw. man könnte if [[ ! $faxnr =~ '^0[01]' ]] noch zu verkürzen
ok, aber es wird immer noch schwieriger die regex zu lesen ;) zumindest für den Anfang ... Daniel -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Am Freitag, 9. März 2007 10:01 schrieb Daniel Bauer:
Hallo Zusammen,
ich versuche gerade mit dem if aus der bash eine Variable zu überprüfen. Soweit ich es verstanden habe, geht das mit regex.
Konkret: Die komplette Variable muß aus Zahlen bestehen Die erste Zahl muß eine 0 sein Die ersten beiden Zahlen dürfen nicht 00 sein Die ersten beiden Zahlen dürfen nicht 01 sein Die ersten vier Zahlen dürfen nicht 0700 sein Die ersten vier Zahlen dürfen nicht 0900 sein
Geht das nur mit sed, od. kann ich das mit einem ganz normalen if und regex auch in der bash lösen?
Mein Ansatz mit if [ $faxnr = [0-9] ] hat leider nicht hingehauen.
Das geht mit einem Einzeiler: nummer=$(echo $faxnr | egrep "^0" | egrep -v "^00" | egrep -v "^01" | egrep -v "^0700" | egrep -v "^0900") Entweder hast Du anschliessend in $nummer eine erlaubte Faxnummer oder einen leeren String stehen.
Danke für jeden Tip Daniel
Gruss Mario -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hallo Mario,
From: "Mario van der Linde"
Am Freitag, 9. März 2007 10:01 schrieb Daniel Bauer:
[...]
Konkret: Die komplette Variable muß aus Zahlen bestehen Die erste Zahl muß eine 0 sein Die ersten beiden Zahlen dürfen nicht 00 sein Die ersten beiden Zahlen dürfen nicht 01 sein Die ersten vier Zahlen dürfen nicht 0700 sein Die ersten vier Zahlen dürfen nicht 0900 sein
[...]
Das geht mit einem Einzeiler:
nummer=$(echo $faxnr | egrep "^0" | egrep -v "^00" | egrep -v "^01" | egrep -v "^0700" | egrep -v "^0900")
Entweder hast Du anschliessend in $nummer eine erlaubte Faxnummer oder einen leeren String stehen.
danke auch dafür, allerdings gefällt es mir als "nur" bash Aufruf besser. Bei Deiner Lösung habe ich noch ein | egrep "^[0-9]*$" angehängt, damit auch nur Zahlen durchkommen. Schön langsam versteh ich das mit den regex - glauch ich zumindest ;) Gruß Daniel -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
participants (3)
-
Daniel Bauer
-
Dr. Jürgen Vollmer
-
Mario van der Linde