Numbers and Arithmetic in bash

From NovaOrdis Knowledge Base
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Internal

How to Tell if a Variable has an Integer Value

v=10

if expr ${v} + 1 >/dev/null 2>&1; then
    #
    # the value contained by v is an integer
    #
else
    #
    # the value contained by v is NOT an integer
    #
fi

More details:

expr

Integral Number Operations

$((...))

op1=4
op2=2
echo $((op1 + op2))
echo $((op1 - op2))
echo $((op1 * op2)) 
echo $((op1 / op2)) # integral division
echo $((op1 % op2)) # modulo
echo $((op1 += op2))

displays:

6
2
8
2
echo $(($(date '+%s') % 2))

also works.

expr

expr

bc

local t0="$(date -u +%s)"
local t1="$(date -u +%s)"
local delta="$(bc <<<"${t1}-${t0}")"

Floating Point Operations

Multiplication:

local operand1=10.1
local operand2=20.2

result=$(echo ${operand1} ${operand2} | awk '{printf "%5.1f\n",$1*$2}') || exit 1
result=$(echo ${operand1} ${operand2} | awk '{printf "%.1f\n",$1*$2}') || exit 1

Division:

local operand1=10.1
local operand2=20.2

result=$(echo ${operand1} ${operand2} | awk '{printf "%5.1f\n",$1/$2}') || exit 1

Increment an Integer

Increment an Integer with ((...)) Operator

Decrement an Integer

Decrement an Integer with ((...)) Operator

Numeric Evaluation in a Condition

a=1
b=2

if [[ $((a - b)) -lt 0 ]]; then
  ...
fi

if [[ $(expr ${a} - ${b}) < 0 ]]; then
  ...
fi

Random Numbers

Bash script that generates a random MAC address