if..fi
設定ファイルのJavaバージョンでこのケースが機能するように努力しています。 /wrapper.conf
出力が次のwrapper.conf
場合java
2つのオプションがあります。
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には残りません。