Comparaison de chaînes pour l'égalité dans ksh
Question
Je teste avec le script shell ci-dessous:
#!/bin/ksh -x
instance=`echo $1 | cut -d= -f2`
if [ $instance == "ALL" ]
then
echo "strings matched \n"
fi
Il est donné cette erreur dans la condition if:
: ==: unknown test operator
est ==
vraiment pas la syntaxe correcte à utiliser?
Je suis en cours d'exécution sur la ligne de commande comme ci-dessous
test_lsn_2 INSTANCE=ALL
Quelqu'un pourrait s'il vous plaît proposer une solution. Merci.
Autres conseils
Pour comparer des chaînes dont vous avez besoin d'un seul =, pas un double. Et vous devriez le mettre entre guillemets dans le cas où la chaîne est vide:
if [ "$instance" = "ALL" ]
then
echo "strings matched \n"
fi
Essayez
if [ "$instance" = "ALL" ]; then
Il y avait plusieurs erreurs:
-
Vous avez besoin des guillemets autour de la variable pour protéger contre le cas (peu probable) qu'il est vide. Dans ce cas, la coque verrait
if [ = "ALL" ]; then
qui n'est pas valide. -
Egal dans la coque utilise un seul
=
(il n'y a aucun moyen pour assigner une valeur à uneif
dans la coquille).
totest=$1
case "$totest" in
"ALL" ) echo "ok" ;;
* ) echo "not ok" ;;
esac
I'va déjà répondu à une question similaire. Fondamentalement, l'opérateur dont vous avez besoin est =
(non ==
) et les sauts de syntaxe si votre variable est vide (à-dire qu'elle devient if [ = ALL]
). Jetez un oeil à autre réponse pour plus de détails.