"if" a multiple argument

Résolu/Fermé
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 20 déc. 2012 à 09:10
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 - 20 déc. 2012 à 13:04
Bonjour,

j'essai de faire ça :
if [ -z $mode -o $mode="ref"] ;then...
mais ça ne fonctionne pas comme je le voudrai, je n'arrive pas à utilise plusieurs argument de test dans le if, et je ne trouve pas d'exemple. (en espérant que c'est clair).


1 réponse

zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 418
20 déc. 2012 à 09:26
Salut,

 if [ -z "${mode}" -o "${mode}" = "ref" ] ;then...

Attention aux espaces avant et après chaque crochet ainsi qu'autour du signe "égale" !
Les quotes aussi sont très importantes et prendre l'habitude d'entourer ses variables avec des accolades.
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
20 déc. 2012 à 09:47
l'espace avant le ] était une erreur de recopie, mais les espaces autour du '=' était bien la cause du problème. Je ne comprend pas ce qu'il fait dans ce cas là et pourquoi il ne met pas de message d'erreur.
Par contre, les guillemets ne sont pas nécessaire.
Merci !
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 418
20 déc. 2012 à 11:05
Par contre, les guillemets ne sont pas nécessaire.
Ils ne sont pas nécessaire entre double crochets, par contre ils sont recommandés entre simple crochet.

$ B="Un saut
de ligne"

$ C="${B}"

$ echo "${B}";echo "${C}"
Un saut
de ligne
Un saut
de ligne

$ echo ${B};echo "${C}"
Un saut de ligne
Un saut
de ligne

$ if [ ${B} = "${C}" ]; then echo "OK"; else echo "Bad"; fi
bash: [: trop d'arguments
Bad

$ if [ "${B}" = "${C}" ]; then echo "OK"; else echo "Bad"; fi
OK

$


Autre exemple :

$ V=""

$ [ "${V}" = "" ] && echo "Vide ou non définie" || echo "Inconnue"
Vide ou non définie

$ [ ${V} = "" ] && echo "Vide ou non définie" || echo "Inconnue"
bash: [: = : opérateur unaire attendu
Inconnue

$
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
20 déc. 2012 à 11:38
Merci pour la précision.
La seule chose que je voulais dire, c'est que l'erreur ne venait pas de là.
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
20 déc. 2012 à 12:52
Pour l'anecdocte, je n'avais pas modifier, le cas viens de se présenter...
Bien ait pour moi, ça m'apprendra à coder salement -> une dizaine de fichiers à modifier.
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 418
20 déc. 2012 à 13:04
En général ce genre d'erreur est salutaire.
C'est d'ailleurs de nos erreurs qu'on apprend le plus paradoxalement ;-))
0