Comparing numbers using Bash

I wrote a script to compare two numbers:

#!/bin/bash

read X
read Y

if [[ $X -le $Y ]]; 
then 
    echo "X is less than Y"

elif [[ $X -ge $Y ]]; 
then
    echo "X is greater than Y"

else 
    echo "X is equal to Y"
fi

For some reason when the value of X and Y are the same, the else condition is not executed. Instead the if [[ $X -le $Y ]]; is executed.

When I change the position of the if and else conditions:

#!/bin/bash

read X
read Y

if [[ $X -eq $Y ]]; 
then 
    echo "X is equal to Y"

elif [[ $X -ge $Y ]]; 
then
    echo "X is greater than Y"

else 
    echo "X is less than Y"
fi

The else condition is executed for this case. Can someone please give me an explanation to why the else condition is executed for one case but not the other?

>Solution :

-le and -ge are like <= and >=.

  • -le = less than or equal
  • -ge = greater than or equal
  • -lt = less than
  • -gt = greater than

It’ll work if you switch to -lt and -gt:

if [[ $X -lt $Y ]]
then 
    echo "X is less than Y"

elif [[ $X -gt $Y ]]
then
    echo "X is greater than Y"

else 
    echo "X is equal to Y"
fi

You can also use (( )) for arithmetic operations. It has more natural syntax: you can use < and >, you don’t need spaces around the operators, and $ dollar signs are optional.

if ((X < Y))
then 
    echo "X is less than Y"

elif ((X > Y))
then
    echo "X is greater than Y"

else 
    echo "X is equal to Y"
fi

Leave a Reply