web-dev-qa-db-fra.com

Comment comparer une variable à une chaîne de texte plutôt qu'à un entier dans une instruction if / else?

Lors de l'écriture d'un script shell, j'ai rencontré un problème avec l'instruction if/else suivante qui se situe quelque part au milieu du script:

if [ $act -eq "add" ]
then
    read - "add or update: " $comm
    git commit -m "$comm $file"
else
    git commit -m "$act $file"
fi

L'erreur de retour étant:

./gitup: line 13: [: add: integer expression expected

et procède ensuite avec le reste du script. Comment puis-je avoir le segment if évaluer/comparer la variable à une chaîne d'entrée plutôt qu'à un entier; une erreur différente était requise lors de l'utilisation de "! =" parmi quelques autres choses que j'ai essayées.

23
tony_perkis666

Quelque chose comme ça:

act="add"
if [[ $act = "add" ]]
then
    echo good
else
    echo not good
fi

-eq est utilisé pour la comparaison de nombres, utilisez = pour la comparaison de chaînes

36
Guru

Cette méthode fonctionnerait aussi. Très similaire à la réponse de @ Guru, mais élimine le besoin de doubles crochets.

if [ "$act" == "add" ]
then
echo "Good!"
      else
      echo "Not good!"
fi
4
Yokai