How can I compare two versions in my Bash script?
I have two versions:
Code: Select all
2.7.1-i486s 2.3-2-spup
^new ^old
I try to compare them.
I hope, you can help me...
Code: Select all
2.7.1-i486s 2.3-2-spup
^new ^old
Code: Select all
if [ $newversion = $oldversion ]
then
echo same
else
echo different
fi
Code: Select all
if vercmp ${NEWVERSION} gt ${OLDVERSION} ; then
echo $NEWVERSION
fi
No need for an application. Try this:linus.cl wrote:I found an application: vercmp.
Code: Select all
newversion="2.7.1-i486s"
oldversion="2.3-2-spup"
[[ "$newversion" > "$oldversion" ]] && echo "newversion is newer" || echo "oldversion is newer"
Code: Select all
case $BASH_VERSION in
1.*) : do_something;;
2.[0-2].*) : do_something_else;;
2.3.*) echo OLD VERSION;;
2.[4-6].*) : do_something_else_more;;
2.7.*) echo NEW VERSION;;
*) echo UNHANDLED bash version $BASH_VERSION;;
esac
Code: Select all
#!/bin/sh
help () {
echo "usage: vercmp-shell version1 lt|gt|le|ge|eq version2
return value 0 if true, else 1"
}
[ $# -ne 3 ] && help && exit 2
case "$2" in
lt) [ "$1" != "$3" ] && [ "$(echo $1,$3 | tr ',' '\n' | sort -k1,1n | head -n1)" = "$1" ] && exit 0 || exit 1;;
gt) [ "$1" != "$3" ] && [ "$(echo $1,$3 | tr ',' '\n' | sort -k1,1n | tail -n1)" = "$1" ] && exit 0 || exit 1;;
le) [ "$1" = "$3" ] || [ "$(echo $1,$3 | tr ',' '\n' | sort -k1,1n | head -n1)" = "$1" ] && exit 0 || exit 1;;
ge) [ "$1" = "$3" ] || [ "$(echo $1,$3 | tr ',' '\n' | sort -k1,1n | tail -n1)" = "$1" ] && exit 0 || exit 1;;
eq) [ "$1" = "$3" ] && exit 0 || exit 1;;
*) help && exit 1;;
esac
exit
Code: Select all
echo $1,$3 | tr ',' '\n' | sort -k1,1n
Code: Select all
printf '%s\n%s' "$1" "$3" | sort -k1,1n
Code: Select all
echo $1,$3 | tr ',' '\n' | sort -k1,1n
Code: Select all
echo $1/$3 | tr '/' '\n' | sort -k1,1n
Code: Select all
echo -e "$1\n$3" | sort -k1,1n