### (( )) - Designed For Integers

In addition to the [[ ]] compound command, bash also provides the (( )) com- pound command, which is useful for operating on integers. It supports a full set of arith- metic evaluations, a subject we will cover fully in Chapter 34.

(( )) is used to perform arithmetic truth tests. An arithmetic truth test results in true if the result of the arithmetic evaluation is non-zero.

[me@linuxbox ~]\$ if ((1)); then echo "It is true."; fi

It is true.

[me@linuxbox ~]\$ if ((0)); then echo "It is true."; fi

[me@linuxbox ~]\$

[me@linuxbox ~]\$ if ((1)); then echo "It is true."; fi

It is true.

[me@linuxbox ~]\$ if ((0)); then echo "It is true."; fi

[me@linuxbox ~]\$

Using (( )), we can slightly simplify the test-integer2 script like this:

#!/bin/bash

# test-integer2a: evaluate the value of an integer.

INT=-5

if [[ "\$INT" =~ ^-?[0-9]+\$ ]]; then if ((INT == 0)); then

echo "INT is zero."

else

if ((INT < 0)); then

echo "INT is negative."

else

echo "INT is positive."

fi

if (( ((INT % 2)) == 0)); then

echo "INT is even."

else

echo "INT is odd."

fi

#!/bin/bash

# test-integer2a: evaluate the value of an integer.

INT=-5

if [[ "\$INT" =~ ^-?[0-9]+\$ ]]; then if ((INT == 0)); then

echo "INT is zero."

else

if ((INT < 0)); then

echo "INT is negative."

else

echo "INT is positive."

fi

if (( ((INT % 2)) == 0)); then

echo "INT is even."

else

echo "INT is odd."

fi

echo "INT is not an integer." >&2 exit 1

fi

echo "INT is not an integer." >&2 exit 1

fi

Notice that we use less-than and greater-than signs and that == is used to test for equiva- lence. This is a more natural-looking syntax for working with integers. Notice too, that because the compound command (( )) is part of the shell syntax rather than an ordi- nary command, and it deals only with integers, it is able to recognize variables by name and does not require expansion to be performed. We’ll discuss (( )) and the related arithmetic expansion further in Chapter 34.