dect
/
asterisk
Archived
13
0
Fork 0
This repository has been archived on 2022-02-17. You can view files and clone it, but cannot push or open issues or pull requests.
asterisk/vercomp.sh

164 lines
4.3 KiB
Bash
Executable File

#! /bin/bash
### flex just outputs a single line:
## flex version 2.5.4
### but bison is a bit more wordy
## bison (GNU Bison) 1.875c
## Written by Robert Corbett and Richard Stallman.
##
## Copyright (C) 2003 Free Software Foundation, Inc.
## This is free software; see the source for copying conditions. There is NO
## warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
### based on this, the version number of the program:
### a. in the first line of output
### b. is the last "word" of that line
program=$1
comparefunc=$2
argver=$3
progver1=`$program --version | head -1`
[[ $progver1 =~ '([^ ]+$)' ]]
progver=$BASH_REMATCH
progver2=$progver
numprogverlist=0
while [[ $progver2 =~ '^([^.]+)\.(.*)' ]]; do
progver2=${BASH_REMATCH[2]}
progverlist[$numprogverlist]=${BASH_REMATCH[1]}
progverlist[$(( ${numprogverlist}+1 ))]=${BASH_REMATCH[2]}
## echo ${BASH_REMATCH[0]}
## echo ${BASH_REMATCH[1]}
## echo ${BASH_REMATCH[2]}
(( numprogverlist=$(( $numprogverlist+1 )) ))
done
(( numprogverlist=$(( $numprogverlist+1 )) ))
## echo number of elements = $numprogverlist
## echo element 0 = ${progverlist[0]}
## echo element 1 = ${progverlist[1]}
## echo element 2 = ${progverlist[2]}
argver2=$argver
numargverlist=0
while [[ $argver2 =~ '^([^.]+)\.(.*)' ]]; do
argver2=${BASH_REMATCH[2]}
argverlist[$numargverlist]=${BASH_REMATCH[1]}
argverlist[$(( ${numargverlist}+1 ))]=${BASH_REMATCH[2]}
## echo ${BASH_REMATCH[0]}
## echo ${BASH_REMATCH[1]}
## echo ${BASH_REMATCH[2]}
(( numargverlist=$(( $numargverlist+1 )) ))
done
(( numargverlist=$(( $numargverlist+1 )) ))
## echo number of argver elements = $numargverlist
## echo element 0 = ${argverlist[0]}
## echo element 1 = ${argverlist[1]}
## echo element 2 = ${argverlist[2]}
if (( $numprogverlist < $numargverlist )); then
for (( i=$numprogverlist ; $i < $numargverlist ; i=$i + 1 )) ; do
## echo setting progverlist "[" $i "]" to 0
(( progverlist[$i]='0' ))
(( numprogverlist=${numprogverlist}+1 ))
done
elif (( $numargverlist < $numprogverlist )); then
for (( i=$numargverlist ; $i < $numprogverlist ; i=$i + 1 )) ; do
## echo setting argverlist "[" $i "]" to 0
(( argverlist[$i]='0' ))
(( numargverlist=${numargverlist}+1 ))
done
fi
## echo numarg=$numargverlist numprog=$numprogverlist
## echo arg0: ${argverlist[0]}
## echo arg1: ${argverlist[1]}
## echo arg2: ${argverlist[2]}
## echo prog0: ${progverlist[0]}
## echo prog1: ${progverlist[1]}
## echo prog2: ${progverlist[2]}
## the main comparison loop
for (( i=0 ; $i < $numargverlist ; i=$i + 1 )) ; do
## echo i= $i
if [[ ${progverlist[$i]} =~ '^[0-9]+$' && ${argverlist[$i]} =~ '^[0-9]+$' ]] ; then ## nothing but numbers
if (( ${progverlist[$i]} != ${argverlist[$i]} )); then
if [[ ${progverlist[$i]} -lt ${argverlist[$i]} ]]; then
if [[ $comparefunc == "=" ]]; then
echo "false"
exit 0;
elif [[ $comparefunc == "<" || $comparefunc == "<=" ]]; then
echo "true"
exit 0;
elif [[ $comparefunc == ">" || $comparefunc == ">=" ]]; then
echo "false"
exit 0;
fi
elif [[ ${progverlist[$i]} -gt ${argverlist[$i]} ]]; then
if [[ $comparefunc == "=" ]]; then
echo "false"
exit 0;
elif [[ $comparefunc == "<" || $comparefunc == "<=" ]]; then
echo "false"
exit 0;
elif [[ $comparefunc == ">" || $comparefunc == ">=" ]]; then
echo "true"
exit 0;
fi
fi
fi
else ## something besides just numbers
if [[ ${progverlist[$i]} != ${argverlist[$i]} ]]; then
if [[ ${progverlist[$i]} < ${argverlist[$i]} ]]; then
if [[ $comparefunc == "=" ]]; then
echo "false"
exit 0;
elif [[ $comparefunc == "<" || $comparefunc == "<=" ]]; then
echo "true"
exit 0;
elif [[ $comparefunc == ">" || $comparefunc == ">=" ]]; then
echo "false"
exit 0;
fi
elif [[ ${progverlist[$i]} > ${argverlist[$i]} ]]; then
if [[ $comparefunc == "=" ]]; then
echo "false"
exit 0;
elif [[ $comparefunc == "<" || $comparefunc == "<=" ]]; then
echo "false"
exit 0;
elif [[ $comparefunc == ">" || $comparefunc == ">=" ]]; then
echo "true"
exit 0;
fi
fi
fi
fi
done
if [[ $comparefunc == "=" ]]; then
echo "true"
elif [[ $comparefunc == "<=" || $comparefunc == ">=" ]]; then
echo "true"
else
echo "false"
fi
exit 0;