SC2170 – ShellCheck Wiki

See this page on GitHub

Sitemap


Invalid number for -eq. Use = to compare as string (or use $var to expand as a variable).

Problematic code:

read -r n
if [ n -lt 0 ]
then
   echo "bad input"
fi

if [ "$USER" -eq root ]
then
  echo "You are root"
fi

Correct code:

read -r n
if [ "$n" -lt 0 ]        # Numerical comparison
then
   echo "bad input"
fi

if [ "$USER" = root ]    # String comparison
then
  echo "You are root"
fi

Rationale:

You are comparing a string value with a numerical operator, such as -eq, -ne, -lt or -gt. These only work for numbers.

If you want to compare the value as a string, switch to the equivalent string operator: =, != \< or \>.

If you want to compare it as a number, such as n=42; while [ n -gt 1024/8 ]; .., then keep the operator and expand the operands yourself with $var or $((expr)): while [ "$n" -gt $((1024/8)) ]

Exceptions:

None.


ShellCheck is a static analysis tool for shell scripts. This page is part of its documentation.