.sh check for numeric content

Giorgos Keramidas keramida at ceid.upatras.gr
Thu Jun 24 05:21:01 UTC 2010


On Thu, 24 Jun 2010 05:19:53 +0200, Thomas Keusch <fwd at bsd-solutions-duesseldorf.de> wrote:
> tk at eternity:~$ b=5
> tk at eternity:~$ case "$b" in
>> [0-9] )
>>         echo numeric
>>         ;;
>> * )
>>         echo alpha
>>         ;;
>> esac
> numeric
> tk at eternity:~$
>
> Works for me.

Depending on what "numeric" means, this may be ok.  For other numeric
values (e.g. floating point numbers) There are simple, fast and correct
ways to check but you have to escape from the shell, e.g.:

    $ var=3.1415926535897931
    $ python -c "$var + 0.0" >/dev/null 2>&1 ; echo $?
    0

    $ var=3a.1415926535897931
    $ python -c "$var + 0.0" >/dev/null 2>&1 ; echo $?
    1

The overhead of spawning a full-blown language interpreter like Perl or
Python may be acceptable if you have to check "a few" values.  Then it
may be overkill if you want to check a million values.  It's really up
to you, as a programmer, to pick the right method.



More information about the freebsd-questions mailing list