我正在尝试使此if..fi
案例适用于配置文件中的 Java 版本。/wrapper.conf
和系统,如果输出wrapper.conf
是java
我有两个选择;
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 就没有什么了。