#!/usr/bin/env sh function semverParseInto() { local RE='[^0-9]*\([0-9]*\)[.]\([0-9]*\)[.]\([0-9]*\)\([0-9A-Za-z-]*\)' #MAJOR eval $2=`echo $1 | sed -e "s#$RE#\1#"` #MINOR eval $3=`echo $1 | sed -e "s#$RE#\2#"` #MINOR eval $4=`echo $1 | sed -e "s#$RE#\3#"` #SPECIAL eval $5=`echo $1 | sed -e "s#$RE#\4#"` } function semverEQ() { local MAJOR_A=0 local MINOR_A=0 local PATCH_A=0 local SPECIAL_A=0 local MAJOR_B=0 local MINOR_B=0 local PATCH_B=0 local SPECIAL_B=0 semverParseInto $1 MAJOR_A MINOR_A PATCH_A SPECIAL_A semverParseInto $2 MAJOR_B MINOR_B PATCH_B SPECIAL_B if [ $MAJOR_A -ne $MAJOR_B ]; then return 1 fi if [ $MINOR_A -ne $MINOR_B ]; then return 1 fi if [ $PATCH_A -ne $PATCH_B ]; then return 1 fi if [[ "_$SPECIAL_A" != "_$SPECIAL_B" ]]; then return 1 fi return 0 } function semverLT() { local MAJOR_A=0 local MINOR_A=0 local PATCH_A=0 local SPECIAL_A=0 local MAJOR_B=0 local MINOR_B=0 local PATCH_B=0 local SPECIAL_B=0 semverParseInto $1 MAJOR_A MINOR_A PATCH_A SPECIAL_A semverParseInto $2 MAJOR_B MINOR_B PATCH_B SPECIAL_B if [ $MAJOR_A -lt $MAJOR_B ]; then return 0 fi if [[ $MAJOR_A -le $MAJOR_B && $MINOR_A -lt $MINOR_B ]]; then return 0 fi if [[ $MAJOR_A -le $MAJOR_B && $MINOR_A -le $MINOR_B && $PATCH_A -lt $PATCH_B ]]; then return 0 fi if [[ "_$SPECIAL_A" == "_" ]] && [[ "_$SPECIAL_B" == "_" ]] ; then return 1 fi if [[ "_$SPECIAL_A" == "_" ]] && [[ "_$SPECIAL_B" != "_" ]] ; then return 1 fi if [[ "_$SPECIAL_A" != "_" ]] && [[ "_$SPECIAL_B" == "_" ]] ; then return 0 fi if [[ "_$SPECIAL_A" < "_$SPECIAL_B" ]]; then return 0 fi return 1 } function semverGT() { semverEQ $1 $2 local EQ=$? semverLT $1 $2 local LT=$? if [ $EQ -ne 0 ] && [ $LT -ne 0 ]; then return 0 else return 1 fi } if [ "___semver.sh" == "___`basename $0`" ]; then MAJOR=0 MINOR=0 PATCH=0 SPECIAL="" semverParseInto $1 MAJOR MINOR PATCH SPECIAL echo "$1 -> M: $MAJOR m:$MINOR p:$PATCH s:$SPECIAL" semverParseInto $2 MAJOR MINOR PATCH SPECIAL echo "$2 -> M: $MAJOR m:$MINOR p:$PATCH s:$SPECIAL" semverEQ $1 $2 echo "$1 == $2 -> $?." semverLT $1 $2 echo "$1 < $2 -> $?." semverGT $1 $2 echo "$1 > $2 -> $?." fi