Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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

Hors ligne

#4 Le 09/06/2014, à 15:03

Totor

Re : RESOLU Problèmes avec les conditions!!!!

tiramiseb a écrit :

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!!!!

tiramiseb a écrit :

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

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

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