Это исправляет ответ FreudianSlip, включающий необязательный, ведущий знак «-» или «+», разрешающий десятичные числа, начинающиеся с «.»(без начального 0) и исключить числа, содержащие несколько символов "."(например, "12 ... 34"):
case $INPUT in
{,1}([-+])+([0-9]){,1}(.)*([0-9])|{,1}([-+]).+([0-9]))
# Variable is numeric
;;
*)
# Nope, not numeric
;;
esac