java - Bash 스크립트의 버전. 정수 오류를 제공합니다

java - Bash 스크립트의 버전. 정수 오류를 제공합니다

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

관련 정보