bash: testen ob Zeichenkette eine Zahl ist
Hallo Liste, ich müsste in einem shellscript testen, ob eine Zeichenkette, die ich in eine Variable einlese eine Zahl ist. Ehrlich gesagt fehlt mir einfach die Idee. Hatte mit "test" hin- und herüberlegt, so nach dem Motto: test $var -eq [a-z]+ Dabei nahm ich mal das [a-z]+ als regulären Ausdruck, der ein oder mehrere vorkommende Buchstaben beschreibt. Aber das hab ich entweder falsch verstanden oder die shell kann es nicht interpretieren. Gibt es vielleicht einen viel einfacheren Weg, um zu verifizieren, ob die Zeichenkette $var eine Zahl oder ein String ist, in dem sowohl Buchstaben als auch Zahlen vorkommen können? Thx for all help, Bernd -- [Zufallssig 3] Und dann war da noch der junge Mann, der unbedingt Schriftsteller werden wollte. Er wollte Emotionen wecken und die Leute zum Weinen bringen. Sein Traum wurde wahr, er verfaßt heute die Fehlermeldungen bei Microsoft.
Bernd Tannenbaum
ich müsste in einem shellscript testen, ob eine Zeichenkette, die ich in eine Variable einlese eine Zahl ist.
if expr $variable : "[0-9]*\$" > /dev/null then echo "zahl" else echo "wort" fi Jürgen -- Dr.rer.nat. Juergen Vollmer, Viktoriastrasse 15, D-76133 Karlsruhe Tel: +49(721) 9204871 Fax: +49(721) 24874 Juergen.Vollmer@[informatik-vollmer.de|alumni.uni-karlsruhe.de|acm.org] www.informatik-vollmer.de
Am Montag, 26. Januar 2004 17:19 schrieb Dr. Jürgen Vollmer:
Bernd Tannenbaum
ich müsste in einem shellscript testen, ob eine Zeichenkette, die ich in eine Variable einlese eine Zahl ist.
if expr $variable : "[0-9]*\$" > /dev/null then echo "zahl" else echo "wort" fi
Prima, danke schön. Hatte mir einen workaround mit grep gebaut, aber so wurden ganz schnell aus 3 Zeilen eine :) Thx, Bernd -- [Zufallssig 1] Windows found - Remove? [Y]es [S]ure [F]ine [O]K
*** Bernd Tannenbaum (tannenbaum@service.itenos.de) schrieb heute in suse-linux:
[...] Ehrlich gesagt fehlt mir einfach die Idee. Hatte mit "test" hin- und herüberlegt, so nach dem Motto: test $var -eq [a-z]+
Wo in "man test" oder "info test" steht, dass "test" regex verarbeiten könnte? Latürlich kannst Du ein Pattern angeben. Es wird aber von der Shell expandiert und Du kannst Dir leicht überlegen, was an dieser Stelle axpandiert wird...
Dabei nahm ich mal das [a-z]+ als regulären Ausdruck, der ein oder mehrere vorkommende Buchstaben beschreibt. Aber das hab ich entweder falsch verstanden oder die shell kann es nicht interpretieren.
Du hast da etwas _total_ falsch verstanden. Ausserdem ist "[a-z]+" eine _extended_ regex, also weder regex noch shell glob.
Gibt es vielleicht einen viel einfacheren Weg, um zu verifizieren, ob die Zeichenkette $var eine Zahl oder ein String ist, in dem sowohl Buchstaben als auch Zahlen vorkommen können?
Ja. Den richtigen! man expr; info expr MG Henning Hucke PS: Was ist augenscheinlich bloß so verdammt schwierig daran, man und info pages zu lesen!? -- Wenn ich tausend Zungen und tausend Muender haette, eine erzene Stimme, koennte ich doch alle Erscheinungen von Bloedheit nicht anfuehren oder alle Namen, unter denen Torheit auftritt, aufzaehlen (Erasmus von Rotterdam,1509)
Am Montag, 26. Januar 2004 18:11 schrieb Henning Hucke:
*** Bernd Tannenbaum (tannenbaum@service.itenos.de) schrieb heute in suse-linux:
[...] Ehrlich gesagt fehlt mir einfach die Idee. Hatte mit "test" hin- und herüberlegt, so nach dem Motto: test $var -eq [a-z]+
Wo in "man test" oder "info test" steht, dass "test" regex verarbeiten könnte? Latürlich kannst Du ein Pattern angeben. Es wird aber von der Shell expandiert und Du kannst Dir leicht überlegen, was an dieser Stelle axpandiert wird...
Ich mache das zB so if expr "$2" : '[0-9]*$' > /dev/null; then # Zahl ... Al
participants (4)
-
Al Bogner
-
Bernd Tannenbaum
-
Dr. Jürgen Vollmer
-
Henning Hucke