1#From: jrmartin@rainey.blueneptune.com (James R. Martin) 2#Newsgroups: comp.unix.shell 3#Subject: Re: testing user input on numeric or character value 4#Date: 26 Nov 1997 01:28:43 GMT 5 6# isnum returns True if its argument is a valid number, 7# and False (retval=1) if it is any other string. 8# The first pattern requires a digit before the decimal 9# point, and the second after the decimal point. 10 11# BASH NOTE: make sure you have executed `shopt -s extglob' before 12# trying to use this function, or it will not work 13 14isnum() # string 15{ 16 case $1 in 17 ?([-+])+([0-9])?(.)*([0-9])?([Ee]?([-+])+([0-9])) ) 18 return 0;; 19 ?([-+])*([0-9])?(.)+([0-9])?([Ee]?([-+])+([0-9])) ) 20 return 0;; 21 *) return 1;; 22 esac 23} 24 25isnum2() # string 26{ 27 case $1 in 28 ?([-+])+([[:digit:]])?(.)*([[:digit:]])?([Ee]?([-+])+([[:digit:]])) ) 29 return 0;; 30 ?([-+])*([[:digit:]])?(.)+([[:digit:]])?([Ee]?([-+])+([[:digit:]])) ) 31 return 0;; 32 *) return 1;; 33 esac 34} 35 36isint() # string 37{ 38 case $1 in 39 ?([-+])+([0-9]) ) 40 return 0;; 41 *) return 1;; 42 esac 43} 44 45isint2() # string 46{ 47 case $1 in 48 ?([-+])+([[:digit:]]) ) 49 return 0;; 50 *) return 1;; 51 esac 52} 53