Is there an easy way to determine if user input is an integer in bash?

One way is to check whether it contains non-number characters. You replace all digit characters with nothing and check for length -- if there's length there's non-digit characters.

if [[ -n ${input//[0-9]/} ]]; then
    echo "Contains letters!"
fi

Another approach is to check whether the variable, evaluated in arithmetic context, is equal to itself. This is bash-specific

if [[ $((foo)) != $foo ]]; then
    echo "Not just a number!"
fi

This is kind of a kludge, it's using -eq for something other then what it was intended, but it checks for an integer, if it doesn't find an int it returns both an error which you can toss to /dev/null and a value of false.

read input
  if [[ $input ]] && [ $input -eq $input 2>/dev/null ]
  then
     echo "$input is an integer"
  else
     echo "$input is not an integer or not defined"
  fi

You can test by using Regular expression

if ! [[ "$yournumber" =~ ^[0-9]+$ ]] ; 
 then exec >&2; echo "error: Not a number"; exit 1
fi

Tags:

Shell

Bash