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.

Était-ce utile?

La solution

Je vois que vous utilisez ksh, mais vous avez ajouté bash comme une balise, acceptez-vous une réponse liée bash? En utilisant bash vous pouvez le faire de cette façon:

if [[ "$instance" == "ALL" ]]
if [ "$instance" = "ALL" ]
if [[ "$instance" -eq "ALL" ]]

Voir pour plus sur ce point.

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:

  1. 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.

  2. Egal dans la coque utilise un seul = (il n'y a aucun moyen pour assigner une valeur à une if 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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top