如何匹配输出中的版本号

如何匹配输出中的版本号

通过以下yum info调用我们可以捕获已安装的版本ambari-metrics-monitor

 yum info ambari-metrics-monitor| grep -i version |head -1
 Version     : 2.6.1.0

为了从输出中验证版本是2.6.1.0,我只需执行以下操作:

 yum info ambari-metrics-monitor| grep -i version |head -1 |  grep "2.6.1.0"

我的感觉是这种方式不是匹配版本浮点数的正确方式。

那么匹配输出中的版本浮点数的正确方法是什么(根据我的示例)?

答案1

package=ambari-metrics-monitor
required_version=2.6.1.0
current_version="$( yum info $package | awk -F: '/Version/ {print $2}' )"

if [[ "$current_version" == "$required_version" ]]; then
    echo "Good to go"
else
    echo "Version mismatch - version $current_version is installed for $package"
fi

答案2

与单awk命令:

yum info ambari-metrics-monitor \
| awk -v ver="2.6.1.0" '$1 ~ /[vV]ersion$/ && $3 == ver{ f=1; exit }
                        END{ printf "Version %smatched\n", (f? "" : "not ") }'

输出将是Version matched或者Version not matched

答案3

如果软件包已经安装,您可以使用 参数--queryformatrpm打印版本号,然后使用-F-x参数grep方便地进行精确匹配:

rpm -q --queryformat %{VERSION} ambari-metrics-monitor \
| grep -qFx 2.6.10 && echo "version matched"

答案4

只需awk你就可以做类似的事情:

yum info ambari-metrics-monitor \
| awk -F: '/Version/{ if ($2 == " 2.6.1.0") {print "yes"} else exit 1}'

请注意,yum版本号之前有空格,因此我必须将其添加到检查字符串中才能匹配。

如果匹配则打印yes(并退出 0),如果不匹配则退出 1

相关内容