如何使用bash或shell脚本在linux机器上找到更高的java版本

如何使用bash或shell脚本在linux机器上找到更高的java版本

我们需要测试和比较java版本

对于如何验证 $version > $New_version 是否存在任何棘手方法的建议?

[root@master tmp]#  version=$(java -version 2>&1 | awk -F '"' '/version/ {print $2}')
[root@master tmp]# echo $version
1.8.0_65
[root@master tmp]# New_version=1.8.0_111
[root@master tmp]# [[ $version > $New_version ]] && echo ok
ok
[root@master tmp]#

答案1

使用 GNU sort 的版本排序以及“检查输入是否已排序”选项:

printf '%s\n%s\n' "$version" "$New_version" | sort -rVc 2>/dev/null && echo ok

2>/dev/null当输入未排序时,删除排序的投诉;您只想知道它是否已排序,这反映在返回代码中。

示例运行:

$ version=1.8.0_65
$ New_version=1.8.0_111
$ printf '%s\n%s\n' "$version" "$New_version" | sort -rVc 2>/dev/null && echo ok
$ version=1.8.0_650
$ printf '%s\n%s\n' "$version" "$New_version" | sort -rVc 2>/dev/null && echo ok
ok
$

或者,用困难的方式来做:

oldstr=${old//./ }
oldstr=${oldstr//_/ }
newstr=${new//./ }
newstr=${newstr//_/ }
read -a oldarr <<< "$oldstr"
read -a newarr <<< "$newstr"

[ ${oldarr[0]} -ge ${newarr[0]} ] &&
[ ${oldarr[1]} -ge ${newarr[1]} ] &&
[ ${oldarr[2]} -ge ${newarr[2]} ] &&
[ ${oldarr[3]} -gt ${newarr[3]} ] && echo OK

这设置了新变量,我们用空格替换所有点和下划线,然后将它们作为此处字符串输入read以将它们拆分为数组,然后我们比较并行数组的每个元素。

相关内容