## Testing Numeric Values

Bash scripting number tests

### Testing Numbers

As we have seen so far we can check files and compare strings. We also can easily compare numerical values. The table below indicates some of the tests that may be performed in conjunction with the "if" statement:

### Numeric Tests within Parenthesis:

Operator Description Example
> Greater than (( x > y ))
>= Greater than or equal to (( x >= y ))
< Less than (( x < y ))
<= Less than or equal to (( x <= y))
!= Not equal to (( x != y))
! Logical Not (( !(x < y) ))
== Equal to. (( x == y))

### Assignment and Equality - "=" and "=="

If you are carrying out a test where you are checking for equality (two identical values) then you must use the double equals operator "==". A single equals operator"=" is used for assignment.

If we wanted to assign a value to a variable we would use the syntax: x=10

If we wanted to check for equality we would use a structure similar to: if (( x==10); then

Example Numerical Tests within an "if" statement:

``````
#!/bin/bash

x=10
y=20

printf "\nThe variable \\$x has been assigned a value of \$x \nThe variable \\$y has been assigned a value of \$y\n"

printf "\nTest x > y : x=\$x y=\$y\n"
if (( x > y )); then
printf "x is greater than y\n"
else
printf "x is less than y\n"
fi

printf "\nTest x >= y : x=\$x y=\$y\n"
if (( x >= y )); then
printf "x is greater than or equal to y\n"
else
printf "x is less than y\n"
fi

printf "\nTest x < y : x=\$x y=\$y\n"
if (( x < y ));then
printf "x is less than y\n"
else
printf "x is greater than y\n"
fi

printf "\nTest x <= y : x=\$x y=\$y\n"
if (( x <= y ));then
printf "x is less than or equal to y\n"
else
printf "x is greater than y\n"
fi

printf "\nTest x != y : x=\$x y=\$y\n"
if (( x != y ));then
printf "x is not equal to y\n"
else
printf "x is equal to y\n"
fi

printf "\nTest x == y : x=\$x y=\$y\n"
if (( x == y ));then
printf "x is equal to y\n"
else
printf "x is not equal to y\n"
fi
``````

Now if we run the above script, we will receive the following output:

``````
john@john-desktop:~/scripts\$ ./test09.sh

The variable \$x has been assigned a value of 10
The variable \$y has been assigned a value of 20

Test x > y : x=10 y=20
x is less than y

Test x >= y : x=10 y=20
x is less than y

Test x < y : x=10 y=20
x is less than y

Test x <= y : x=10 y=20
x is less than or equal to y

Test x != y : x=10 y=20
x is not equal to y

Test x == y : x=10 y=20
x is not equal to y

``````

### Other Integer Operators

As we saw earlier we can use double bracket parenthesis style tests. However, you may also use the following syntax:

Operator Description Example
eq Equal to [ \$x -eq 20 ]
ne Not equal to [ \$x -ne 20 ]
gt Greater than [ \$x -gt 20 ]
ge Greater than or equal to [ \$x -ge 20 ]
lt Less than [ \$x -lt 20 ]
le Less than or equal to [ \$x -le 20 ]

Example Script:

``````
#!/bin/bash

x=10

printf "\nThe variable \\$x has been assigned a value of \$x\n"

printf "\nTest x -eq 20 : x=\$x\n"
if [ \$x -eq 20 ];then
printf "x is equal to 20\n"
else
printf "x is not equal to 20\n"
fi

printf "\nTest x -ne 20 : x=\$x\n"
if [ \$x -ne 20 ];then
printf "x is not equal to 20\n"
else
printf "x is equal to 20\n"
fi

printf "\nTest x -gt 20 : x=\$x\n"
if [ \$x -gt 20 ];then
printf "x is Greater than 20\n"
else
printf "x is not Greater than 20\n"
fi

printf "\nTest x -ge 20 : x=\$x\n"
if [ \$x -ge 20 ];then
printf "x is Greater than or equal to 20\n"
else
printf "x is not Greater than or equal to 20\n"
fi

printf "\nTest x -lt 20 : x=\$x\n"
if [ \$x -lt 20 ];then
printf "x is less than 20\n"
else
printf "x is not less than 20\n"
fi

printf "\nTest x -le 20 : x=\$x\n"
if [ \$x -le 20 ];then
printf "x is less than or equal to 20\n"
else
printf "x is not less than or equal to 20\n"
fi
``````

Output from Example Script:

``````
john@john-desktop:~/scripts\$ ./test10.sh

The variable \$x has been assigned a value of 10

Test x -eq 20 : x=10
x is not equal to 20

Test x -ne 20 : x=10
x is not equal to 20

Test x -gt 20 : x=10
x is not Greater than 20

Test x -ge 20 : x=10
x is not Greater than or equal to 20

Test x -lt 20 : x=10
x is less than 20

Test x -le 20 : x=10
x is less than or equal to 20
``````