从BASH脚本检查Java版本的正确方法
如何从bash脚本中检查Java是否可用(在PATH中或通过JAVA_HOME)并确保版本至less为1.5?
也许是这样的:
if type -p java; then echo found java executable in PATH _java=java elif [[ -n "$JAVA_HOME" ]] && [[ -x "$JAVA_HOME/bin/java" ]]; then echo found java executable in JAVA_HOME _java="$JAVA_HOME/bin/java" else echo "no java" fi if [[ "$_java" ]]; then version=$("$_java" -version 2>&1 | awk -F '"' '/version/ {print $2}') echo version "$version" if [[ "$version" > "1.5" ]]; then echo version is more than 1.5 else echo version is less than 1.5 fi fi 你可以通过以下方式获得java版本
 JAVA_VER=$(java -version 2>&1 | sed -n ';s/.* version "\(.*\)\.\(.*\)\..*"/\1\2/p;') 
 它会给你16像Java 1.6.0_13和15像1.5.0_17版本。 
所以你可以很容易地在shell中比较它:
 [ "$JAVA_VER" -ge 15 ] && echo "ok, java is 1.5 or newer" || echo "it's too old..." 
更新:这个代码应该正常工作与openjdk和JAVA_TOOL_OPTIONS中所述的评论。
 您可以发出java -version并读取&parsing输出 
 java -version 2>&1 >/dev/null | grep 'java version' | awk '{print $3}' 
我最终使用的方法是:
 # Work out the JAVA version we are working with: JAVA_VER_MAJOR="" JAVA_VER_MINOR="" JAVA_VER_BUILD="" # Based on: http://stackoverflow.com/a/32026447 for token in $(java -version 2>&1 | grep -i version) do if [[ $token =~ \"([[:digit:]])\.([[:digit:]])\.(.*)\" ]] then JAVA_VER_MAJOR=${BASH_REMATCH[1]} JAVA_VER_MINOR=${BASH_REMATCH[2]} JAVA_VER_BUILD=${BASH_REMATCH[3]} break fi done 
即使JAVA_TOOL_OPTIONS被设置为由于grep所做的过滤而导致的问题,它也能正常工作。
不同答案的组合:
 JAVA_VER=$(java -version 2>&1 | grep -i version | sed 's/.*version ".*\.\(.*\)\..*"/\1/; 1q') 
-   Java 7返回7,Java8返回8
- 适用于OpenJDK和Oracle JDK
- 即使设置了JAVA_TOOL_OPTIONS也可以工作
我知道这是一个非常古老的线索,但这对他人仍然有帮助。
 要知道您是在运行Java 5,6或7,首先键入java -version 。 
在你的输出中会有一行看起来类似于: java version“1.7.0_55”
然后你使用这个表格将“行话”结果转换成版本号。
  1.7.0_55是Java 7 
  Java 1.6是1.6.0_75 
  1.5.0_65是Java 5 
 从Oracle网站上的页面获取的信息 
  http://www.oracle.com/technetwork/java/javase/7u55-relnotes-2177812.html