isnum2() { case "$1" in '[-+]' | '') return 1;; # empty or bare `-' or `+' [-+]*[!0-9]*) return 1;; # non-digit with leading sign [-+]*) return 0;; # OK *[!0-9]*) return 1;; # non-digit *) return 0;; # OK esac } # this one handles floating point isnum3() { case "$1" in '') return 1;; # empty *[!0-9.+-]*) return 1;; # non-digit, +, -, or . *?[-+]*) return 1;; # sign as second or later char *.*.*) return 1;; # multiple decimal points *) return 0;; # OK esac }