1847076 Members
5615 Online
110262 Solutions
New Discussion

number or letter

 
SOLVED
Go to solution
andi_1
Frequent Advisor

number or letter

Hi guys,

i have one more question: in some cases, I have user enter a number, how can I check if indeed a number was entered, and not anything else? (opposite example would also be good!)

Thanks a lot!
7 REPLIES 7
Jeff Schussele
Honored Contributor
Solution

Re: number or letter

Hi andi,

read answer
if [$ANSWER = [a-zA-Z]]
then
echo "Good Answer"
else
echo "Enter a letter"

HTH,
Jeff
PERSEVERANCE -- Remember, whatever does not kill you only makes you stronger!
S.K. Chan
Honored Contributor

Re: number or letter

Something like this ..

Number
======
if [[ $VAR = +([0-9]) ]]
then
....
else
...
fi

Alphas
======
if [[ $VAR = +([a-zA-Z]) ]]
then
....
else
...
fi
Jeff Schussele
Honored Contributor

Re: number or letter

Well...last one was an opposite...almost - range did not include chars other than alphabet - EX @#$%^&*( etc.

This one should do it

read ANSWER
if [$ANSWER != [0-9]]
then
echo "Enter a Number"
else
echo "Good Answer"
fi

The positive situation would be
read ANSWER
if [$ANSWER = [0-9]]
then
echo "Good Answer"
else
echo "Enter a Number"
fi

Rgds,
Jeff


PERSEVERANCE -- Remember, whatever does not kill you only makes you stronger!
James R. Ferguson
Acclaimed Contributor

Re: number or letter

Hi:

This is one method:

#!/usr/bin/sh
typeset X=$1
if [ `expr "$X" : '[0-9,\-]*'` -ne `expr "$X" : '.*'` ]
then
echo "not a number!"
else
echo "ok, is a number!"
fi
exit 0

Regards!

...JRF...
John Carr_2
Honored Contributor

Re: number or letter

Hi and an old way

#!/usr/bin/ksh
echo "Enter something :"
read my_value

# the next statement will return a value zero providing its numeric

let new_value=$my_value

if [[ $? -eq 0 ]] ; then
echo "ok its an integer"
else
echo "failed the test"
fi


John.
David Totsch
Valued Contributor

Re: number or letter


If you are looking at number letters versus everything else, how about a case statement (it uses file name generation):

case ${ANSR}
in
[0-9]) echo Number
;;
[!0-9]) echo Not a number
;;
*) echo not sure what I got
;;
esac

If you are looking for numbers that are not a single digit integer, you would need to formulate a regular expression and use some other program for the text. Here is an extended regular expression that matches numbers (signed and floating point, too):

^(\+|-)?[0-9]*\.?[0-9]+$

-dlt-

Jordan Bean
Honored Contributor

Re: number or letter

(using POSIX shell)

If you're expecting only a numberic response, why not force the variable to be an integer?

typeset -i rval=0

Any attempt to assign a string to it will fail.

This can also be used to help distinguish between alpha and numeric responses:

typeset -i rval=0
read answer
if ( rval=$answer )
then
echo numeric
else
echo alpha
fi