Všimněte si, že pokud chcete zjistit, zda je nastavena proměnná, pravděpodobně nebudete chtít použít if/else ani test ([). Typičtější je dělat věci jako:
# Abort if JAVA_HOME is not set (or empty) : ${JAVA_HOME:?JAVA_HOME is unset}
nebo
# report the value of JAVA_HOME, or a default value echo ${JAVA_HOME:-default value}
nebo
# 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
Narážíte na hloupé omezení způsobu sh
rozšiřuje argumenty. Řádek 3 vašeho skriptu se rozšiřuje na:
if [ != ]
Které sh
nemůže přijít na to, co s tím. Vyzkoušejte tento ošklivý hack na velikost:
if [ x$JAVA_HOME != x ]
Oba argumenty musí být neprázdné, takže jednoduše vyvoláme x
do obou a uvidíte, co se stane.
Případně existuje samostatný operátor pro testování, zda řetězec není prázdný:
if [ !-z $JAVA_HOME ]
(-z
testuje, zda je následující řetězec prázdný.)
-n
a -z
možnosti jsou testy, které by měly být použity zde:
if [ -n "$JAVAHOME" ]; then
echo "$JAVAHOME";
else
echo "\$JAVAHOME not set";
fi