Linux

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

  • December 11, 2018

我們需要測試和比較java版本

任何關於如何驗證的棘手方法的建議 $ 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]#

使用 GNU 排序的版本排序以及“檢查輸入是否已排序”選項:

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

這設置了新變數,我們用空格替換所有點和下劃線,然後將它們作為 here-strings 輸入read以將它們拆分為數組,然後我們比較並行數組的每個元素。

引用自:https://unix.stackexchange.com/questions/487356