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ソートバージョンのソートを使用してください。
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
の各要素を比較します。