scripts/common: Add functions for comparing version strings
This is introduced mainly for convenience. Examples of supported usage: eq 0xf.1 15.1 # true gt 1.1.00 2 # false le 2.33.4 2.44.02 # true ge 03.03.03 3.3.01 # true lt 1 0 # false ge 4.19.0-6-amd64 4.10.0-6-amd64 # true neq 0.0 0 # false Change-Id: Iac05fce03bfe95f85ab1c8a7c24c4553ffc6776a Signed-off-by: Michal Berger <michalx.berger@intel.com> Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/4808 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com> Reviewed-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com>
This commit is contained in:
parent
dc45a73d9e
commit
77c4d0f673
@ -235,3 +235,51 @@ function nvme_in_userspace() {
|
|||||||
((${#bdfs[@]})) || return 1
|
((${#bdfs[@]})) || return 1
|
||||||
printf '%s\n' "${bdfs[@]}"
|
printf '%s\n' "${bdfs[@]}"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cmp() {
|
||||||
|
local ver1 ver1_l
|
||||||
|
local ver2 ver2_l
|
||||||
|
|
||||||
|
IFS=".-:" read -ra ver1 <<< "$1"
|
||||||
|
IFS=".-:" read -ra ver2 <<< "$3"
|
||||||
|
local op=$2
|
||||||
|
|
||||||
|
ver1_l=${#ver1[@]}
|
||||||
|
ver2_l=${#ver2[@]}
|
||||||
|
|
||||||
|
local lt=0 gt=0 eq=0 v
|
||||||
|
case "$op" in
|
||||||
|
"<") : $((eq = gt = 1)) ;;
|
||||||
|
">") : $((eq = lt = 1)) ;;
|
||||||
|
"<=") : $((gt = 1)) ;;
|
||||||
|
">=") : $((lt = 1)) ;;
|
||||||
|
"==") : $((lt = gt = 1)) ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
decimal() (
|
||||||
|
local d=${1,,}
|
||||||
|
if [[ $d =~ ^[0-9]+$ ]]; then
|
||||||
|
echo $((10#$d))
|
||||||
|
elif [[ $d =~ ^0x || $d =~ ^[a-f0-9]+$ ]]; then
|
||||||
|
d=${d/0x/}
|
||||||
|
echo $((0x$d))
|
||||||
|
else
|
||||||
|
echo 0
|
||||||
|
fi
|
||||||
|
)
|
||||||
|
|
||||||
|
for ((v = 0; v < (ver1_l > ver2_l ? ver1_l : ver2_l); v++)); do
|
||||||
|
ver1[v]=$(decimal "${ver1[v]}")
|
||||||
|
ver2[v]=$(decimal "${ver2[v]}")
|
||||||
|
((ver1[v] > ver2[v])) && return "$gt"
|
||||||
|
((ver1[v] < ver2[v])) && return "$lt"
|
||||||
|
done
|
||||||
|
[[ ${ver1[*]} == "${ver2[*]}" ]] && return "$eq"
|
||||||
|
}
|
||||||
|
|
||||||
|
lt() { cmp "$1" "<" "$2"; }
|
||||||
|
gt() { cmp "$1" ">" "$2"; }
|
||||||
|
le() { cmp "$1" "<=" "$2"; }
|
||||||
|
ge() { cmp "$1" ">=" "$2"; }
|
||||||
|
eq() { cmp "$1" "==" "$2"; }
|
||||||
|
neq() { ! eq "$1" "$2"; }
|
||||||
|
Loading…
Reference in New Issue
Block a user