Package version testing script

I was wondering if anyone already had a script to check rpm packages versions x.x.x or greater.

so I could do a:

# CheckRpmVersion Somepackage-1.2.3

And would output: whether the package is installed or not and if it was equal to or greater than the version 1.2.3.

I know I can pull out the Major.Minor.Sub and compare each one. But there has to be something simpler.

---------- Post updated at 09:52 AM ---------- Previous update was at 08:33 AM ----------

Here is what I came up with.

#!/bin/sh
#
#

REQ=$1

PKG=$(echo $REQ | awk -F- ' { print $1 } ')
echo $PKG
REQVer=$(echo $REQ | awk -F- ' { print $2 } ')
REQMajor=$(echo $REQVer | awk -F. ' { print $1 } ')
REQMinor=$(echo $REQVer | awk -F. ' { print $2 } ')
REQSub=$(echo $REQVer | awk -F. ' { print $3 } ')
echo "Requires:$REQMajor.$REQMinor.$REQSub"


PKGVer=$(/bin/rpm -q $PKG)
PKGMajor=$(echo $PKGVer | awk -F. ' { print $1 }' | awk -F- ' { print $2 } ')
PKGMinor=$(echo $PKGVer | awk -F. ' { print $2 }')
PKGSub=$(echo $PKGVer | awk -F. ' { print $3 }' | awk -F- ' { print $1 } ')
echo "Actual:$PKGMajor.$PKGMinor.$PKGSub"

if [[ $PKGMajor > $REQMajor ]];then
    echo "Good"
elif [[ $PKGMajor = $REQMajor && $PKGMinor > $REQMinor ]];then
    echo "Good"
elif [[ $PKGMajor = $REQMajor && $PKGMinor = $EREQMinor && $PKGSub > $REQSub ]];then
    echo "Good"
else
    echo "Bad"
fi
# ./RPMCheck.sh binutils-2.16.92.0.2
binutils
Requires:2.16.92
Actual:2.17.50
Good

---------- Post updated at 10:03 AM ---------- Previous update was at 09:52 AM ----------

One problem I found.

The example works but if I use compat-libstdc++-33-3.2.3 it tries to split at first -

---------- Post updated at 11:49 AM ---------- Previous update was at 10:03 AM ----------

Replaced:

REQVer=$(echo $REQ | awk -F- ' { print $2 } ')

With:

REQVer=$(echo $REQ | sed -e 's/\([A-Za-z0-9.-+]*\)-\([0-9]*\.\)/\2/')

So far it works good.

---------- Post updated at 12:34 PM ---------- Previous update was at 11:49 AM ----------

Found some other errors.

Here is the finished code. Please feel free to tear it apart and suggest better ways, PLEASE.

#!/bin/sh
#
#
REQ=$1
PKG=$(echo $REQ |sed -e 's/\([A-Za-z0-9.-+].*\)-[0-9]\..*/\1/')
REQVer=$(echo $REQ | sed -e 's/\([A-Za-z0-9.-+].*\)-\([0-9]*\.\)/\2/')
REQMajor=$(echo $REQVer | awk -F. ' { print $1 } ')
REQMinor=$(echo $REQVer | awk -F. ' { print $2 } ')
REQSub=$(echo $REQVer | awk -F. ' { print $3 } ')

PKGVer=$(/bin/rpm -q "$PKG" | sed 's/\.el[0-9]//')
PKGVer=$(echo $PKGVer | sed -e 's/\([A-Za-z0-9.-+].*\)-\([0-9]*\.\)/\2/')
PKGMajor=$(echo $PKGVer | awk -F. ' { print $1 }')
PKGMinor=$(echo $PKGVer | awk -F. ' { print $2 }')
PKGSub=$(echo $PKGVer | awk -F. ' { print $3 }' | awk -F- ' { print $1 } ')

if [[ $PKGMajor > $REQMajor ]];then
    echo "Good"
elif [[ $PKGMajor = $REQMajor && $PKGMinor > $REQMinor ]];then
    echo "Good"
elif [[ $PKGMajor = $REQMajor && $PKGMinor = $REQMinor && $PKGSub > $REQSub ]];then
    echo "Good"
elif [[ $PKGMajor = $REQMajor && $PKGMinor = $REQMinor && $PKGSub = $REQSub ]];then
    echo "Good"
else
    echo "Bad"
fi