Bash Commands - Arithmetic Tests using (( ... ))

The (( )) construct expands and evaluates an arithmetic expression. If the expression evaluates as zero, it
returns an exit status of 1, or "false". A non-zero expression returns an exit status of 0, or "true". This is in
marked contrast to using the test and [ ] constructs previously discussed.

#!/bin/bash

# arith-tests.sh
# Arithmetic tests.
# The (( ... )) construct evaluates and tests numerical expressions.

# Exit status opposite from [ ... ] construct!


(( 0 ))                                                                                         # 1

echo "Exit status of \"(( 0 ))\" is $?."


(( 1 ))                                                                                         # 0

echo "Exit status of \"(( 1 ))\" is $?."


(( 5 > 4 ))                                                                                   # true

echo "Exit status of \"(( 5 > 4 ))\" is $?."                          # 0


(( 5 > 9 ))                                                                                   # false

echo "Exit status of \"(( 5 > 9 ))\" is $?."                          # 1


(( 5 == 5 ))                                                                                 # true

echo "Exit status of \"(( 5 == 5 ))\" is $?."                        # 0


                                                                                                    # (( 5 = 5 )) gives an error message.
(( 5 - 5 ))                                                                                    
# 0

echo "Exit status of \"(( 5 - 5 ))\" is $?."                            # 1


(( 5 / 4 ))                                                                                      # Division o.k.

echo "Exit status of \"(( 5 / 4 ))\" is $?."                             # 0


(( 1 / 2 ))                                                                                     # Division result < 1.
echo "Exit status of \"(( 1 / 2 ))\" is $?."                           
# Rounded off to 0.
                                                                                                    
# 1
(( 1 / 0 )) 2>/dev/null # Illegal division by 0.

#
^^^^^^^^^^^
echo "Exit status of \"(( 1 / 0 ))\" is $?."
                                                                                                         # 1
# What effect does the "2>/dev/null" have?
# What would happen if it were removed?
# Try removing it, then rerunning the script.
# ======================================= #
# (( ... )) also useful in an if-then test.
var1=5
var2=4
if (( var1 > var2 ))
then                                                                      #Note: Not $var1, $var2. Why?
echo "$var1 is greater than $var2"
fi                                                                            # 5 is greater than 4

exit 0





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章