![如何匹配输出中的版本号](https://linux22.com/image/128115/%E5%A6%82%E4%BD%95%E5%8C%B9%E9%85%8D%E8%BE%93%E5%87%BA%E4%B8%AD%E7%9A%84%E7%89%88%E6%9C%AC%E5%8F%B7.png)
通过以下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
如果软件包已经安装,您可以使用 参数--queryformat
仅rpm
打印版本号,然后使用-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