PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Unix shell wie feststellen ob Variable eine Zahl ist?



wdsl
05-01-2007, 16:08
Hi,
wie lässt sich mit der shell feststellen ob eine Variable eine Zahl ist?

mfg
wdsl

peschmae
05-01-2007, 19:48
Holzhammermethode :D :


peschmae@sid:~$ I=3
peschmae@sid:~$ if [ $I -eq 0 -o $I -ne 0 ]; then echo true; else echo false; fi
true
peschmae@sid:~$ I=3a
peschmae@sid:~$ if [ $I -eq 0 -o $I -ne 0 ]; then echo true; else echo false; fi
bash: [: 3a: integer expression expected
false
peschmae@sid:~$


Wobei die ist wirklich blöd. Nur die erste Idee. Zweite Variante - grep, schon etwas weniger doof *g*:


peschmae@sid:~$ I=31284
peschmae@sid:~$ echo $I | grep -q -e "^[0-9][0-9]*$"
peschmae@sid:~$ echo $?
0
peschmae@sid:~$ I=31284a812
peschmae@sid:~$ echo $I | grep -q -e "^[0-9][0-9]*$"
peschmae@sid:~$ echo $?
1


kannst du dann in dem Stil verwenden:


if echo $I | grep -q -e "^[0-9][0-9]*$"; then
echo zahl;
else
echo keinezahl;
fi


MfG Peschmä

wdsl
08-01-2007, 16:46
fällt dir sonst noch was ein?



I=ja;if [ $I -eq 0 -o $I -ne 0 ]; then echo true; else echo false; fi


gibt true zurück auf Solaris

und grep mit der Option -e kann ich nicht bzw nur sehr ungern verwenden.

mfg
wdsl

peschmae
08-01-2007, 17:16
...
gibt true zurück auf Solaris

Ich ging jetzt mal vom GNU-Zeugs aus.



und grep mit der Option -e kann ich nicht bzw nur sehr ungern verwenden.


Geht auch ohne das -e. Zumindest mit gnu grep. Das -e ist nur so ein Reflex bei mir.

MfG Peschmä

Thomas Engelke
10-01-2007, 11:23
Sollte grep nicht Quantifizierer kennen? Also anstatt


^[0-9][0-9]*$

lieber


^[0-9]{1,}$

oder am Besten


^[0-9]+$

?

peschmae
10-01-2007, 12:35
Dachte ich eigentlich auch, nur ging das irgendwie nicht. Jetzt hab ichs noch mal schnell getestet und bin dank txt2regex auf die Idee gekommen, das + extra zu escapen - damit gehts dann:



grep -q "^[0-9]\+$"


MfG Peschmä

zst
10-01-2007, 20:44
Hallo,
wie wäre es damit ?
Gruss zst



EING=$1
case $EING in
'' | *[!0-9]* ) echo -e "$EING ist keine Zahl!" ; exit 1 ;;
*) ;;
esac