2009-12-09 73 views
2

您好我想编写一个shell脚本,它将返回已安装的JRE版本。如何编写shell脚本文件来实现上述功能。如何编写shell脚本以获得JRE版本

如果我写Java的版本,那么应用程序返回 “1.6.0_14” 的Java(TM)SE运行时环境(建立1.6.0_14-B08) 的HotSpot的Java(TM)服务器VM(建14.0-B16,混合模式)”。

但我想DONOT任何字符串。我想只有JRE版本。

感谢 苏尼尔·库马尔Sahoo

回答

4

如果你只想版本(而不是整个字符串),你可以这样做像:

- 另存为(比方说)javaversion.sh

#!/bin/sh 
# Changed code to remove the 'head -1' as per the suggestion in comment. 
JAVA_VERSION=`java -version 2>&1 |awk 'NR==1{ gsub(/"/,""); print $3 }'` 
# export JAVA_VERSION 
echo $JAVA_VERSION 

这给:

$ 1.6.0_15 

在我的系统上(该死的,甚至更过时! :-))

我发现'2> & 1'在我的系统中是必需的,因为输出似乎是'stderr'而不是'stdout'。 (2> & 1 =将标准错误的输出发送到标准输出流;在这种情况下,我们可以继续处理头部等)。

awk中的'gsub'位有必要删除字符串中的双引号。 (全球SUBSTitue),$ 3是第三个字段(awk默认其字段分隔符为空格)。

“反引号”(`)被用来捕获输出 - 然后我们将它存储在一个变量中。

[使用 '一刀切',而不是 '的awk' 可能是更优雅在这里 - 见GrzegorzOledzki的帖子。]

+0

失去了头并使用awk:Java的版本2>&1 | awk的“NR == 1 {gsub(/“/,”“); print $ 3}' – ghostdog74 2009-12-09 14:38:53

+0

@monojohnny是否可以在不执行脚本的情况下将其从shell的屏幕上打印出来? – Michael 2011-12-04 11:30:06

+0

@Michael你的意思不仅仅是使用”java -version“? – kevingreen 2012-12-13 15:23:40

1
#!/bin/sh 

java -version 
-1

看看的

输出
java -version 
-1

可以使用java命令,与-version开关获取安装的JRE版本:

$ java -version 
java version "1.6.0_14" 
Java(TM) SE Runtime Environment (build 1.6.0_14-b08) 
Java HotSpot(TM) Server VM (build 14.0-b16, mixed mode) 
6

跟在后面monojohnny的答案的想法,但使用的cut代替awk

java -version 2>&1 | head -n 1 | cut -d\" -f 2 
1

或者:

编写一个访问系统属性“java.version”的Java类:它将删除其他一些格式化垃圾,并允许您输出到标准输出而不是标准错误。

只是你的shell脚本中调用它与一个

java -cp <classpath> GetJavaVersion.class 
1

只是使用shell

$ a=$(java -version 2>&1 >/dev/null) 
$ set -- $a 
$ echo $3 
"1.6.0_0"