我有一个bash脚本:
#!/bin/bash
JAVA_VERSION="1.6.0_17"
_STDOUT=`java -version`
if [ $JAVA_VERSION = $_STDOUT ]; then
echo "Matched"
else
echo "Not Matched"
fi
我得到了结果:
java version "1.6.0_17" OpenJDK Runtime Environment (IcedTea6 1.7.5) (rhel-1.16.b17.el5-x86_64) OpenJDK 64-Bit Server VM (build 14.0-b16, mixed mode) t4.sh: line 8: [: 1.6.0_17: unary operator expected Not Matched
$ _STDOUT有多行时,如何将$ JAVA_VERSION与$ _STDOUT匹配
你有一些问题.
java -version将其输出放在STDERR上,而不是STDOUT,因此您必须将STDERR重定向到STDOUT以解析它. JAVA_VERSION="1.6.0_17"shell将删除引号,您可以用单引号将双引号括起来使它们成为文字. bash你应该使用[[ ]]而不是[ ].后者实际上是test内置的同义词,前者是本机语法,允许更多功能; 其中一个是你不需要引用里面的变量..
#!/bin/bash
JAVA_VERSION='"1.6.0_17"'
_STDOUT=$(java -version 2>&1 | awk 'NR==1{print $3}')
if [[ $JAVA_VERSION = $_STDOUT ]]; then
echo "Matched"
else
echo "Not Matched"
fi
Run Code Online (Sandbox Code Playgroud)
$ java -version
java version "1.6.0_20"
Java(TM) SE Runtime Environment (build 1.6.0_20-b02)
Java HotSpot(TM) Client VM (build 16.3-b01, mixed mode, sharing)
$ JAVA_VERSION='"1.6.0_20"'; _STDOUT=$(java -version 2>&1 | awk 'NR==1{print $3}'); if [[ $JAVA_VERSION = $_STDOUT ]]; then echo "Matched"; else echo "Not Matched"; fi
Matched
$ JAVA_VERSION='"1.6.0_19"'; _STDOUT=$(java -version 2>&1 | awk 'NR==1{print $3}'); if [[ $JAVA_VERSION = $_STDOUT ]]; then echo "Matched"; else echo "Not Matched"; fi
Not Matched
Run Code Online (Sandbox Code Playgroud)