java -Bash 脚本中的版本。给出整数错误

java -Bash 脚本中的版本。给出整数错误

我正在尝试使此if..fi案例适用于配置文件中的 Java 版本。/wrapper.conf和系统,如果输出wrapper.confjava

我有两个选择;
1.wrapper.java.command=/apps/jdk1.8.0_191/bin/java
2.wrapper.java.command=java

如果 Java 版本很长,则应该打印它。

如果只是java,则意味着它使用默认java,并且应该检查java版本。

使用下面的脚本,我无法得到它。我遇到以下错误。

integer expression expected
Usage: java [-options] class [args...]
           (to execute a class)
   or  java [-options] -jar jarfile [args...]
           (to execute a jar file)

脚本片段:

for file in $(echo $folder/conf/wrapper.conf)

do

JavaVersion=$(grep "command" $file | awk -F "=" '{print $NF}')

if [ "$JavaVersion" -eq "java" ]; then

java -version 2>&1 >/dev/null | grep 'java version'

else

$JavaVersion

fi

答案1

除了done你的循环缺失fra-san 评论过,并且-eq 整数比较抱怨你要求它比较的字符串,还有一个错误,你在没有参数的情况下调用了一些特定的java二进制文件,生成了你看到的错误的后半部分。

由于在任何一种情况下您都可能需要 java 版本,因此$JavaVersion无论如何都只需执行即可。

JavaVersion=$(grep wrapper.java.command= "$file" | awk -F "=" '{print $NF}')
"$JavaVersion" -version

看来我误解了打印wrapper.java.command值的最终目标(如果它不完全)java,否则执行java -version

if grep -Fxq wrapper.java.command=java "$file" 
then
  java -version 2>&1 | grep 'java version'
else
  grep ^wrapper.java.command= "$file" | cut -d= -f2-
fi

答案2

-eq运算符用于整数比较。由于您正在尝试比较字符串,因此您需要使用=,特别是:

if [ "$JavaVersion" = "java" ]; then

此外,以下行似乎有缺陷:

java -version 2>&1 >/dev/null | grep 'java version'

您将 stdout 和 stderr 都重定向到 /dev/null (所有输出),因此 grep 就没有什么了。

相关内容