2009-12-09 72 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"