#1 Le 09/06/2014, à 12:40
- sylvanux
RESOLU Problèmes avec les conditions!!!!
Je voudrais comprendre ce qui ne va pas dans cette commande.
Mon but, en fait, est d'utiliser 2 conditions, avoir un paramètre et que ce paramètre corresponde à un mot précis mais ca ne marche pas. Le programme fait comme si je ne rentrai pas de paramètre. Quelqu'un a t il une idée de l'erreur que je peux bien commettre??
D'avance merci!!!
#/bin/bash
read -p 'Entrez le code : ' $1
if [ $# -ge 1 ] && [ $1 = koala ]
then
echo "Bravo!"
echo "Vous avez le bon code !"
else
echo "Vous n'avez pas le bon code !"
fi
Dernière modification par sylvanux (Le 10/06/2014, à 17:52)
Hors ligne
#2 Le 09/06/2014, à 13:35
- casperfr
Re : RESOLU Problèmes avec les conditions!!!!
Bonjour,
le $1 est la pour renvoyé le 1er argument et non comme un variable que tu peux créé avec read
essai comme ça
read -p 'Entrez le code : ' reponse
if [ $reponse = koala ]
then
echo "Bravo!"
echo "Vous avez le bon code !"
else
echo "Vous n'avez pas le bon code !"
fi
Hors ligne
#3 Le 09/06/2014, à 13:44
- tiramiseb
Re : RESOLU Problèmes avec les conditions!!!!
Salut,
Trois erreur...
1/ dans le "read" on donne le nom d'une variable sans le "$" devant
2/ on ne peut pas affecter une valeur aux variables d'arguments ($1, $2, etc)
3/ si tu veux utiliser "&&", il faut mettre deux crochets
Ensuite, un commentaire :
si tu testais vraiment les arguments à la commande (et non une réponse à une question), tu n'aurais pas besoin de vérifier la longueur des arguments : si un argument est absent, la variable correspondante est simplement vide (auquel cas "$1" = "", simplement).
Ça donnerait donc :
#/bin/bash
read -p 'Entrez le code : ' code
if [ "$code" = "koala" ]
then
echo "Bravo!"
echo "Vous avez le bon code !"
else
echo "Vous n'avez pas le bon code !"
fi
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
Hors ligne
#4 Le 09/06/2014, à 15:03
- Totor
Re : RESOLU Problèmes avec les conditions!!!!
2/ on ne peut pas affecter une valeur aux variables d'arguments ($1, $2, etc)
Ce n'est pas tout à fait vrai.
Il est possible d'affecter des valeurs aux paramètres de position mais on ne peut pas le faire individuellement.
Ceci permet de remplacer les paramètres de position 1, 2 et 3 et de réinitialiser tous les autres :
set -- val1 val2 val3
-- Lucid Lynx --
Hors ligne
#5 Le 10/06/2014, à 11:38
- sylvanux
Re : RESOLU Problèmes avec les conditions!!!!
3/ si tu veux utiliser "&&", il faut mettre deux crochets
Pourrais-tu me donner un exemple s'il te plait, cela m'interresserait beaucoup!!
Merci.
Hors ligne
#6 Le 10/06/2014, à 11:41
- casperfr
Re : RESOLU Problèmes avec les conditions!!!!
Pourrais-tu me donner un exemple s'il te plait, cela m'interresserait beaucoup!!
par exemple
if [[ "$code" = "koala" ]] && [[ "$code" != "kaolo" ]]
then
echo "Bravo!"
echo "Vous avez le bon code !"
else
echo "Vous n'avez pas le bon code !"
fi
désolé l'exemple ai bidon mais compréhensif
Hors ligne
#7 Le 10/06/2014, à 11:52
- tiramiseb
Re : RESOLU Problèmes avec les conditions!!!!
Tu peux aussi mettre les deux & dans les crochets, ce qui est plus joli :
read -p 'Entrez le code : ' code
read -p 'Entrez le second code : ' code2
if [[ "$code" = "koala" && "$code2" = "plouf" ]]
then
echo "Bravo!"
echo "Vous avez le bon code !"
else
echo "Vous n'avez pas le bon code !"
fi
Et sinon, la syntaxe la plus standard serait la suivante :
if [ "$code" = "koala" -a "$code2" = "plouf" ]
then
echo "Bravo!"
echo "Vous avez le bon code !"
else
echo "Vous n'avez pas le bon code !"
fi
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
Hors ligne
#8 Le 10/06/2014, à 13:10
- sylvanux
Re : RESOLU Problèmes avec les conditions!!!!
Sinon en fait après avoir bien cherché j'ai aussi trouvé cette façon de faire et ça marche je l'ai testé.
#/bin/bash
read -p 'Entrez le code : ' reponse
if [ -n $reponse ] && [ $reponse = koala ]
then
echo "Bravo!"
echo "Vous avez le bon code !"
else
echo "Vous n'avez pas le bon code !"
fi
Par contre si je ne rentre pas de valeur j'ai un message d'erreur!!! Le programme attend surement une valeur!!!
Je vais tester ton script pour voir si cela fonctionne mieux que le mien!!
En tout cas merci
Dernière modification par sylvanux (Le 10/06/2014, à 13:13)
Hors ligne
#9 Le 10/06/2014, à 14:34
- tiramiseb
Re : RESOLU Problèmes avec les conditions!!!!
Par contre si je ne rentre pas de valeur j'ai un message d'erreur!!!
Ben oui, vu que tu ne protèges pas les valeurs avec des guillemets. Si tu ne donne pas de valeur à « reponse », alors le shell remplacera tes occurrences de "$reponse" par rien du tout, ce qui donne :
if [ -n ] && [ = koala ]
C'est pour ça que depuis le début je mets des guillemets...
Avec des guillemets, sans valeur à « reponse » ça donnerait :
if [ -n "" ] && [ "" = koala ]
... ce qui est déjà bien mieux.
Par contre, pourquoi tester d'abord si la chaîne a une longueur non nulle ? C'est inutile, le second test suffit...
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
Hors ligne
#10 Le 10/06/2014, à 17:52
- sylvanux
Re : RESOLU Problèmes avec les conditions!!!!
Oui tout a fait d'accord avec toi mais je débute en shell et c'est juste pour tester des choses. Disons que je me complique un peu la vie pour essayer de "programmer", essayer d'avoir une certaine logique informatique.
Et au fait, merci, ça marche normalement si je mets des guillemets!!! Fallait y penser!!! ;-)
Dernière modification par sylvanux (Le 10/06/2014, à 17:57)
Hors ligne