Linux
如何使用 bash 或 shell 腳本在 linux 機器上找到更高的 java 版本
我們需要測試和比較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
以將它們拆分為數組,然後我們比較並行數組的每個元素。