Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
lima-vm
GitHub Repository: lima-vm/lima
Path: blob/master/pkg/cidata/cidata.TEMPLATE.d/util/compare_version.sh
2649 views
1
#!/bin/bash
2
3
# SPDX-FileCopyrightText: Copyright The Lima Authors
4
# SPDX-License-Identifier: Apache-2.0
5
6
set -eu
7
8
: "${SELFTEST:=}"
9
if [ -n "$SELFTEST" ]; then
10
unset SELFTEST
11
echo >&2 "=== Running positive tests ==="
12
(
13
set -x
14
"$0" 0.1.2 -eq 0.1.2
15
"$0" 0.1.2 -ne 0.1.3
16
"$0" 0.1.2 -ge 0.1.1
17
"$0" 0.1.2 -ge 0.1.2
18
"$0" 0.1.10 -ge 0.1.9
19
"$0" 0.1.2 -gt 0.1.1
20
"$0" 0.1.10 -gt 0.1.9
21
"$0" 0.1.2 -le 0.1.2
22
"$0" 0.1.2 -le 0.1.3
23
"$0" 0.1.2 -le 0.1.10
24
"$0" 0.1.2 -lt 0.1.3
25
"$0" 0.1.2 -lt 0.1.10
26
)
27
echo >&2 "=== Running negative tests ==="
28
(
29
set -x
30
"$0" 0.1.2 -eq 0.1.1 && false
31
"$0" 0.1.2 -ne 0.1.2 && false
32
"$0" 0.1.2 -ge 0.1.3 && false
33
"$0" 0.1.2 -gt 0.1.2 && false
34
"$0" 0.1.2 -le 0.1.1 && false
35
"$0" 0.1.2 -lt 0.1.2 && false
36
true
37
)
38
exit 0
39
fi
40
41
if [ "$#" -ne 3 ]; then
42
echo >&2 "Usage: $0 VERSION-A OP VERSION-B"
43
echo >&2 "Implemented operators: -eq, -ne, -ge, -gt, -le, -lt"
44
echo >&2 ""
45
echo >&2 "Example: $0 1.2.10 -ge 1.2.9"
46
exit 1
47
fi
48
49
version_a="$1"
50
op="$2"
51
version_b="$3"
52
53
sorted="$(echo -ne "${version_a}\n${version_b}\n" | sort -V -r | head -n1)"
54
case "${op}" in
55
-eq)
56
[ "${version_a}" = "${version_b}" ]
57
;;
58
-ne)
59
[ "${version_a}" != "${version_b}" ]
60
;;
61
-ge)
62
[ "${version_a}" = "${sorted}" ]
63
;;
64
-gt)
65
[ "${version_a}" = "${sorted}" ] && [ "${version_a}" != "${version_b}" ]
66
;;
67
-le)
68
[ "${version_b}" = "${sorted}" ]
69
;;
70
-lt)
71
[ "${version_b}" = "${sorted}" ] && [ "${version_a}" != "${version_b}" ]
72
;;
73
*)
74
echo "Unknown operator \"$op\""
75
exit 1
76
;;
77
esac
78
79