my case is very simple:
I am trying to compare two values:
a=0.2
b=0.1
The code that I am trying to execute is:
if [ "$a" -gt "$b" ]; then
echo "You are running an outdated version"
fi
CodePudding user response:
Assuming you want to compare version numbers, would you please try the following:
#!/bin/bash -posix
# compares version numbers
# prints 0 if $a == $b
# positive number if $a is newer than $b
# negative number if $a is older than $b
vercmp() {
local a=$1
local b=$2
local a1=${a%%.*} # major number of $a
local b1=${b%%.*} # major number of $b
if [[ $a = "" ]]; then
if [[ $b = "" ]]; then
echo 0 # both $a and $b are empty
else
vercmp "0" "$b"
fi
elif [[ $b = "" ]]; then
vercmp "$a" "0"
elif (( 10#$a1 == 10#$b1 )); then
local a2=${a#*.} # numbers after the 1st dot
if [[ $a2 = $a ]]; then
a2="" # no more version numbers
fi
local b2=${b#*.} # numbers after the 1st dot
if [[ $b2 = $b ]]; then
b2="" # no more version numbers
fi
vercmp "$a2" "$b2"
else
echo $(( 10#$a1 - 10#$b1 ))
fi
}
Examples:
vercmp 0.2 0.1
=> 1 (positive number: the former is newer)
vercmp 1.0.2 1.0.10
=> -8 (negative number: the latter is newer)
a=0.2
b=0.1
if (( $(vercmp "$a" "$b") > 0 )); then
echo "You are running an outdated version"
fi