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에 남은 것이 없습니다.