Notez que si vous voulez déterminer si une variable est définie, vous ne voudrez probablement pas utiliser if/else ou test ([). Il est plus courant de faire des choses comme :
# Abort if JAVA_HOME is not set (or empty) : ${JAVA_HOME:?JAVA_HOME is unset}
ou
# report the value of JAVA_HOME, or a default value echo ${JAVA_HOME:-default value}
ou
# 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
Vous vous heurtez à une limitation stupide de la façon dont sh
développe les arguments. La ligne 3 de votre script est étendue à :
if [ != ]
Quel sh
ne sait pas quoi faire avec. Essayez ce vilain hack pour la taille :
if [ x$JAVA_HOME != x ]
Les deux arguments doivent être non vides, nous lancerons donc simplement un x
dans les deux et voyez ce qui se passe.
Alternativement, il existe un opérateur séparé pour tester si une chaîne n'est pas vide :
if [ !-z $JAVA_HOME ]
(-z
teste si la chaîne suivante est vide.)
Le -n
et -z
les options sont des tests qui doivent être utilisés ici :
if [ -n "$JAVAHOME" ]; then
echo "$JAVAHOME";
else
echo "\$JAVAHOME not set";
fi