Beachten Sie, dass Sie, wenn Sie feststellen möchten, ob eine Variable gesetzt ist, wahrscheinlich weder if/else noch test ([) verwenden möchten. Es ist üblicher Dinge zu tun wie:
# Abort if JAVA_HOME is not set (or empty) : ${JAVA_HOME:?JAVA_HOME is unset}
oder
# report the value of JAVA_HOME, or a default value echo ${JAVA_HOME:-default value}
oder
# Assign JAVA_HOME if it is unset (or empty) : ${JAVAHOME:=default value}
if [ -z $JAVA_HOME ]
then
echo $JAVA_HOME
else
echo "NO JAVA HOME SET"
fi
Sie stoßen auf eine dumme Einschränkung des Weges sh
erweitert Argumente. Zeile 3 Ihres Skripts wird erweitert zu:
if [ != ]
Welche sh
kann nicht herausfinden, was zu tun ist. Probieren Sie diesen fiesen Hack für die Größe aus:
if [ x$JAVA_HOME != x ]
Beide Argumente müssen nicht leer sein, also geben wir einfach x
aus in beide und sehen was passiert.
Alternativ gibt es einen separaten Operator zum Testen, ob ein String nicht leer ist:
if [ !-z $JAVA_HOME ]
(-z
testet, ob der folgende String leer ist.)
Die -n
und -z
Optionen sind Tests, die hier verwendet werden sollten:
if [ -n "$JAVAHOME" ]; then
echo "$JAVAHOME";
else
echo "\$JAVAHOME not set";
fi