How to Compare Numbers or Integers in Bash

In my earlier article I gave you an overview and difference between strings and integers in bash. Now there are different comparison operators which can be used to compare variables containing numbers, which we will learn in this tutorial guide. Being a system administrator you may come across many such requirement where you will need to write a script to perform certain task and iterate the script based on certain numerical values which is where we can use use these operators to compare numbers in bash.

 

There are two different sets of Integer comparison operator which can be used depending upon your requirement.

  • Within square braces
  • Within double parenthesis

 

Comparison Operators for Integers or Numbers

Operator NameSyntax with Square BracketsSyntax with double parenthesisComment
is equal to[ $INT1 -eq $INT2 ]
OR
[[ $INT1 -eq $INT2 ]]
==Returns TRUE if both the integers in comparison are equal
is not equal to[ $INT1 -ne $INT2 ]
OR
[[ $INT1 -ne $INT2 ]]
!=Returns TRUE if both integers in comparison are not equal
is greater than[ $INT1 -gt $INT2 ]
OR
[[ $INT1 -gt $INT2 ]]
(( $INT1 > $INT2 ))Returns TRUE if left integer is greater than right integer
is less than[ $INT1 -lt $INT2 ]
OR
[[ $INT1 -lt $INT2 ]]
(( $INT1 < $INT2 ))Returns TRUE if left integer is smaller in value than the right integer
is greater than or equal to[ $INT1 -ge $INT2 ]
OR
[[ $INT1 -ge $INT2 ]]
(( $INT1 >= $INT2 ))Returns TRUE is the left operand if either greater than on equal to the right operand value
is less than or equal to[ $INT1 -le $INT2 ]
OR
[[ $INT1 -le $INT2 ]]
(( $INT1 <= $INT2 ))Returns TRUE if left operand if lesser or equal in value to the right operand

 

1. Integer comparison operators within Square Braces

These comparison operators must be used within single or double square braces [ ] or [[ ]]

1.1 Check if integers are equal (-eq)

I will write a basic script to compare the numbers from two different variables. Here both my integer variables have same number, but let's verify this using comparison operator:

INT1=100
INT2=100
if [ $INT1 -eq $INT2 ]; then
  echo "exit status: $?"
  echo "Both integers are equal"
else
  echo "exit status: $?"
  echo "Both integers are not equal"
fi

The output from this script returns zero exit status as both the variables have same number.

exit status: 0
Both integers are equal

 

1.2 Compare variables with different numbers using (-ne)

In this sample script we will use -ne operator to check and compare variables. Here both my variables have different numbers assigned

INT1=100
INT2=101
if [ $INT1 -ne $INT2 ]; then
  echo "exit status: $?"
  echo "Both integers are not equal"
else
  echo "exit status: $?"
  echo "Both integers are equal"
fi

The output from this script returns zero exit status for the first if condition.

exit status: 0
Both integers are not equal

 

1.3 Compare integer values using (-gt) and (-lt)

To check if the numbers in an variable are greater than or less than each other we use -gt or -lt operator. In this example we know that INT1 is greater than INT2 but let us verify this using comparison operators

INT1=101
INT2=100
if [ $INT1 -gt $INT2 ]; then
  echo "exit status: $?"
  echo "\$INT1 is greater than \$INT2"
else
  echo "exit status: $?"
  echo "\$INT2 is greater than \$INT1"
fi

The output from this script. The first condition returns TRUE with zero exit status.

exit status: 0
$INT1 is greater than $INT2

If I modify my variable values, now INT1 is lesser than INT2 but let's verify this using our comparison operator:

INT1=99
INT2=100
if [ $INT1 -lt $INT2 ]; then
  echo "exit status: $?"
  echo "\$INT1 is lesser than \$INT2"
else
  echo "exit status: $?"
  echo "\$INT2 is lesser than \$INT1"
fi

The output from this script now returns zero status for first condition where -lt is TRUE

exit status: 0
$INT1 is lesser than $INT2

 

1.4 Compare integer values using (-ge) and (-le)

We normally use -ge and -le in loop conditions wherein the script will perform a certain task until the loop completes.
I will take a basic if and else condition script to verify return status of both these comparison operator

INT1=101
INT2=100
if [ $INT1 -ge $INT2 ]; then
  echo "exit status: $?"
  echo "\$INT1 is greater than or equal to \$INT2"
else
  echo "exit status: $?"
  echo "\$INT2 is greater than or equal to \$INT1"
fi

The output from this script returns TRUE for first condition

exit status: 0
$INT1 is greater than or equal to $INT2

In the same script I will modify the values of both the variables to verify less than equal to operator

INT1=99
INT2=100
if [ $INT1 -le $INT2 ]; then
  echo "exit status: $?"
  echo "\$INT1 is lesser than or equal to \$INT2"
else
  echo "exit status: $?"
  echo "\$INT2 is lesser than or equal to \$INT1"
fi

The output from this script

exit status: 0
$INT1 is lesser than or equal to $INT2

 

2. Integer comparison operators within Double Parenthesis

These comparison operator must be used double parenthesis (( ))

2.1 Compare integers using (<) or (>)

in this sample script we compare our variables using comparison operator under double parenthesis

INT1=99
INT2=100
if (( $INT1 < $INT2 )); then
  echo "exit status: $?"
  echo "\$INT1 is lesser than \$INT2"
else
  echo "exit status: $?"
  echo "\$INT2 is lesser than \$INT1"
fi

The output from this script

exit status: 0
$INT1 is lesser than $INT2

Similarly to verify the greater than (>) operator:

INT1=99
INT2=100
if (( $INT1 > $INT2 )); then
  echo "exit status: $?"
  echo "\$INT1 is greater than \$INT2"
else
  echo "exit status: $?"
  echo "\$INT2 is greater than \$INT1"
fi

The output from this script

exit status: 1
$INT2 is greater than to $INT1

 

2.2 Compare integers using (<=) or (>=)

These comparison operators are mostly used in loop conditions in real time environments.

INT1=99
INT2=100
if (( $INT1 <= $INT2 )); then
  echo "exit status: $?"
  echo "\$INT1 is lesser than or equal to \$INT2"
else
  echo "exit status: $?"
  echo "\$INT2 is lesser than or equal to \$INT1"
fi

The output from this script, since INT1 is lesser than INT2 in this example the first condition has returned TRUE

exit status: 0
$INT1 is lesser than or equal to $INT2

In the same script I will modify the integer values:

INT1=99
INT2=100
if (( $INT1 >= $INT2 )); then
  echo "exit status: $?"
  echo "\$INT1 is greater than or equal to \$INT2"
else
  echo "exit status: $?"
  echo "\$INT2 is greater than or equal to \$INT1"
fi

The output from this script changes accordingly and now INT2 is reported greater than INT1

exit status: 1
$INT2 is greater than or equal to $INT1

 

Conclusion

Bash is still one of the most used programming language, although we don't prefer bash for writing complicated scripts but for normal scripts such as taking backup for automating certain day to day tasks, bash is still preferred across Linux users.
Comparing integer values in variables is something which is required to be performed in most of the shell scripts.

Lastly I hope the steps from the tutorial guide to understand different comparison operators for integers on Linux was helpful. So, let me know your suggestions and feedback using the comment section.

 

References

I have used below external references for this tutorial guide
Comparison Operators
Arithmetic Expression

Leave a Comment

Please use shortcodes <pre class=comments>your code</pre> for syntax highlighting when adding code.