何が間違っている私のシェルスクリプトSunOS、フランスその他のlinuxの味

StackOverflow https://stackoverflow.com/questions/7832277

  •  27-10-2019
  •  | 
  •  

質問

くださいできる人を識別ですが私のシェルスクリプトを動作させることができ微その他のLinuxシステムを除くSunos以下が私の出力

drifter% cat run.sh
#!/bin/sh -x
if [ ! $JAVA_HOME ] || [ $JAVA_HOME == "" ]
then
    echo Enter path to JAVA HOME:
    read JAVA_HOME
fi

if [ ! -f $JAVA_HOME/bin/java ]
then
echo "JAVA_HOME variable does not point to a valid java instance"
exit 1
fi

echo "Using JAVA_HOME: "$JAVA_HOME
JAVA_BIN=$JAVA_HOME/bin
ver=`$JAVA_HOME/bin/java -version 2>&1 | head -1 | awk '{print $NF}' | cut -d'.' -f2`

if [ $ver -ge 5 ]
then
    JAVA_LIB=`pwd`/lib
    export JAVA_LIB

    $JAVA_BIN/java -cp ./lib/a-jdbc-sqlserver-4.2.1.jar:./lib/a-jdbc-db2-4.2.1.jar:./lib/ilmInit.jar:./lib/db2jcc.jar:./lib/db2jcc_license_cisuz.jar:./lib/db2jcc_license_cu.jar:./lib/csm-runtime-1.0.jar:./lib/csm-dbutil-1.0.jar:./lib/classes12_g.jar:./lib/commons-beanutils-1.8.3.jar:./lib/commons-cli-1.2.jar:./lib/commons-exec-1.1.jar:./lib/log4j-1.2.8.jar:./lib/groovy-all-1.8.1.jar -Dlog4j.configuration=com/a/csm/log4j.xml -Dendorsed_plugins_dir=./plugins InitValues $@

else
    echo Current JDK $ver
    echo "Expected JDK 1.5 or later. Please fix your JAVA HOME and try again."
    exit 1
fi
drifter% ./run.sh
+ [ ! ]
./run.sh: test: argument expected
drifter%

注意:を使用してい csh

更新

私変更 "$JAVA_HOME" 随所に

まだ取得します

drifter% ./run.sh
+ [ ! /home/ilma1/java16/java ]
+ [ /home/ilma1/java16/java ==  ]
./run.sh: test: unknown operator ==
役に立ちましたか?

解決

おそらく$JAVA_HOMEが設定されていません。未設定の変数は通常、空の文字列に展開されるため、次のようになります。 ジェネラコディセタグプレ

はこれと同等です: ジェネラコディセタグプレ

これは構文エラーです。([は、testコマンドの別名です。通常はシンボリックリンクです。)

変数名を引用してみてください: ジェネラコディセタグプレ

プロンプトに応答して$JAVA_HOMEを設定する場合は、おそらくそれをexportする必要があります。(実際、それはわかりません。javaは、設定されている$JAVA_HOMEに依存しますか?)

編集

わかりました。$JAVA_HOMEが設定されたようです。

test(または[)コマンドの場合、文字列の等式演算子は、=ではなく==です。

試してみてください: ジェネラコディセタグプレ

EDIT2

これ: ジェネラコディセタグプレ

おそらくより良いです(@ n.mの答えを参照してください)。

他のヒント

空の文字列をチェックするポータブルな方法は ジェネラコディセタグプレ

または ジェネラコディセタグプレ

if [ "x$VAR" == "x" ]を使用することも可能です。このフォームは、空になる可能性のある任意の文字列を比較するのに役立ちます。if [ "x$JAVA_HOME" == "x$SCALA_HOME" ]

この形式のif [ "$VAR" ]は、一部の古いシェルの化身では失敗する可能性がありますが、最新のSunOSは問題ないはずです。

==ではないオペレーター sh.単=はposix準拠した試験ます。

if [ ! $JAVA_HOME ] || [ $JAVA_HOME = "" ]

私がこの問題は、Solaris10から大snippedの情報この十年にする必要があります:http://lists.infowares.com/archive/clug/2003-February/001849.html

私た'場合は"["a"=="a"];そしてエコーが可fi、bourne シェルプロンプトの数がいろいろなプラットフォーム.Solarisにおいて行われて試験:未知のオペレーター=='エクス"というsh:==:未知のオペレーター試験"HP-UX "というsh==:テストコマンドパラメータが有効ではありません。' IRIX"はい"と答え (できることに))

第二に、 まれてくる可能性があることでsh知らないと空の文字列が返されます。老hackは変更試験を

[ XX"$JAVA_HOME" = XX"" ]

る私にとって比較します[XX/opt/jdk1.7.0_02=XX]はfalseによって試験と空の右手側に失敗し一部。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top