Les commande "if" débutant en bash
Fermé
guigui
-
19 juin 2012 à 20:06
-----geo----- Messages postés 333 Date d'inscription jeudi 7 juin 2012 Statut Membre Dernière intervention 29 mai 2014 - 22 juin 2012 à 15:42
-----geo----- Messages postés 333 Date d'inscription jeudi 7 juin 2012 Statut Membre Dernière intervention 29 mai 2014 - 22 juin 2012 à 15:42
A voir également:
- Les commande "if" débutant en bash
- Invite de commande - Guide
- Commande terminal mac - Guide
- Diskpart commande - Guide
- Logiciel de programmation pour débutant - Guide
- Bash: adduser : commande introuvable ✓ - Forum Debian
9 réponses
liquidus88
Messages postés
655
Date d'inscription
dimanche 7 septembre 2008
Statut
Membre
Dernière intervention
8 septembre 2012
116
Modifié par liquidus88 le 19/06/2012 à 20:16
Modifié par liquidus88 le 19/06/2012 à 20:16
Bonsoir,
Il est normal qu'il te réponde toujours, après avoir demander d'entrer le nom (read) tu écrit nom="blanche", si tu fixe la valeur de la variable APRÈS l'avoir demandée, il prend la nouvelle valeur (et donc ignore ce que tu as tapé). Comme tu défini la variable "nom" à "Blanche" le nom est toujours égal à Blanche, normal qu'il te réponde.
J'explique plus en détail:
read -p "Bonjour quel est votre nom:" demande le nom
Tu tapes "Blanche" => le nom est Blanche (et si tu tapes Guillaume, le nom est Guillaume)
nom="Blanche" défini le nom à Blanche, le nom est donc Blanche (ce qui fait que si tu avais tapé Blanche avant, Blanche devient Blanche, si tu avais tapé Guillaume, Guillaume devient Blanche)
if [ $nom = "Blanche" ] vérifié si le nom est Blanche, hors, la ligne précèdente (nom="Blanche") défini le nom à "Blanche", donc le nom est forcément Blanche, quelque soit celui que tu as entré en premier... la condition est remplie, il te répond.
Cordialement.
EDIT: Je t'indiques juste ton erreur, je te laisses la corriger, te donner la réponse ne serait pas instructif.
Il est normal qu'il te réponde toujours, après avoir demander d'entrer le nom (read) tu écrit nom="blanche", si tu fixe la valeur de la variable APRÈS l'avoir demandée, il prend la nouvelle valeur (et donc ignore ce que tu as tapé). Comme tu défini la variable "nom" à "Blanche" le nom est toujours égal à Blanche, normal qu'il te réponde.
J'explique plus en détail:
read -p "Bonjour quel est votre nom:" demande le nom
Tu tapes "Blanche" => le nom est Blanche (et si tu tapes Guillaume, le nom est Guillaume)
nom="Blanche" défini le nom à Blanche, le nom est donc Blanche (ce qui fait que si tu avais tapé Blanche avant, Blanche devient Blanche, si tu avais tapé Guillaume, Guillaume devient Blanche)
if [ $nom = "Blanche" ] vérifié si le nom est Blanche, hors, la ligne précèdente (nom="Blanche") défini le nom à "Blanche", donc le nom est forcément Blanche, quelque soit celui que tu as entré en premier... la condition est remplie, il te répond.
Cordialement.
EDIT: Je t'indiques juste ton erreur, je te laisses la corriger, te donner la réponse ne serait pas instructif.
-----geo-----
Messages postés
333
Date d'inscription
jeudi 7 juin 2012
Statut
Membre
Dernière intervention
29 mai 2014
59
21 juin 2012 à 12:06
21 juin 2012 à 12:06
if...;then ... fi
plusieurs conditions:
if ....;then ... elif .....;then ... fi fi
après tu peux rajouter des else et chaque if, elif et else doit etre refermé par un fi
Bonjour, ce que tu a écrit je les bien compris est cela est bien assimiler, ce que j'ai plus de peine ses déclarer une valeur et faire les test
-----geo-----
Messages postés
333
Date d'inscription
jeudi 7 juin 2012
Statut
Membre
Dernière intervention
29 mai 2014
59
21 juin 2012 à 16:05
21 juin 2012 à 16:05
Je me corrige a ma dernière réponse j'ai dit qu'il fallait refermer chaque if, elif et else par un fi mais surtout pas les else!!! quel erreur x) bref pour ton problème j'ai 3 types de solutions:
D'abord avec une boucle peut etre que tu n'en veux pas mais parfois utile pour forcer la personne a entrer la bonne réponse, le script ne s'arrète pas il sort de la boucle une fois qu'il a récupérer la valeur qu'il demande:
Le deuxième exemple toujours pareil avec la boucle while mais j'ai vu que ta valeur été prédéfini alors voila ce que sa pourrait donner:
Et enfin le dernier exemple avec ton if ^^':
Et pour le fun j'ai aussi fait le code avec le if sans la valeur prédéfinie:
Voila alors le -n après echo c pour que la saisie se fasse a la meme ligne et mes echo avec rien derrière c'est normal s'est pour faire de la place je prefere ainsi après le design c'est une autre histoire tu change a ta guise mais bon tout collé enchainé je trouve sa moins lisible :P
D'abord avec une boucle peut etre que tu n'en veux pas mais parfois utile pour forcer la personne a entrer la bonne réponse, le script ne s'arrète pas il sort de la boucle une fois qu'il a récupérer la valeur qu'il demande:
#/bin/sh echo -n "veuillez entré votre prenom: " read prenom while [ "$prenom" != Blanche ] do echo echo "Saisie incorrect" echo -n "Veuillez ressaisir votre prénom: " read prenom done echo "Vous etes bien la personne que je cherche, vous etes $prenom" exit 0
Le deuxième exemple toujours pareil avec la boucle while mais j'ai vu que ta valeur été prédéfini alors voila ce que sa pourrait donner:
#/bin/sh valeur=Blanche echo -n "veuillez entré votre prenom: " read prenom while [ "$prenom" != $valeur ] do echo echo "Saisie incorrect" echo -n "Veuillez ressaisir votre prénom: " read prenom done echo "Vous etes bien la personne que je cherche, vous etes $prenom" exit 0
Et enfin le dernier exemple avec ton if ^^':
#/bin/sh valeur=Blanche echo -n "veuillez entré votre prenom: " read prenom if [ "$prenom" != $valeur ];then echo "Saisie incorrecte" else echo "Vous etes bien la personne que je cherche" fi exit 0
Et pour le fun j'ai aussi fait le code avec le if sans la valeur prédéfinie:
#/bin/sh echo -n "veuillez entré votre prenom: " read prenom if [ "$prenom" != Blanche ];then echo "Saisie incorrect" else echo "Vous etes bien la personne que je cherche" fi exit 0
Voila alors le -n après echo c pour que la saisie se fasse a la meme ligne et mes echo avec rien derrière c'est normal s'est pour faire de la place je prefere ainsi après le design c'est une autre histoire tu change a ta guise mais bon tout collé enchainé je trouve sa moins lisible :P
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
A chaque foi tu mes la saisie correcte en dernier y a t'il une ré son particulier a cela? je suis en trin d'étudier ce que tu a écrit est voir les erreur que j'ai pue faire... de plus je constate qu'a chaque fin de script il y a " exit 0 " je suppose que ses pour indiquer a bash la fin de script ? dans mes cour nul par il en parle...
je voi dans la ligne [ "$prénom != blanche ] dans tout les exemple tu utilise le signe "!=" il faut donc le test du "prénom a sa valeur saisie , valeur enregistrer Blanche, ne pourrais t'on pas faire : [ blanche -o Blanche ] expr1 -o expr2
Vrai si expr1 ou expr2 est vraie. comme cela si l'utilisateur ne met pas de majuscule le résulta et bon?
Vrai si expr1 ou expr2 est vraie. comme cela si l'utilisateur ne met pas de majuscule le résulta et bon?
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 419
Modifié par zipe31 le 22/06/2012 à 12:16
Modifié par zipe31 le 22/06/2012 à 12:16
Salut,
Utilise les doubles crochets pour ça :
Une autre façon de faire :
Utilise les doubles crochets pour ça :
if [[ ${prenom} != [Bb]lanche ]]
Une autre façon de faire :
#/bin/bash while : do echo -n "Veuillez entrer votre prénom : " read prenom if [[ ${prenom} != [Bb]lanche ]] then echo "Saisie incorrecte." continue else echo "Vous êtes bien la personne que je cherche." break fi done
-----geo-----
Messages postés
333
Date d'inscription
jeudi 7 juin 2012
Statut
Membre
Dernière intervention
29 mai 2014
59
22 juin 2012 à 11:26
22 juin 2012 à 11:26
exit 0 wai c'est pour eviter que le script s'arete et le terminal reste inerte il sort du script quoi, et après pour le test prénom oui majuscule ou pas tu change ta variable a ta guise tu met ce que tu veux et te complique pas la vie avec les expr t'en a pas vraiment besoin
ok ses super cool de votre par de prendre du tempt a m'expliquer, je commence a mieux comprendre le principe, il faut que je m'exerce, je trouve les script super intéressant et très motiver , sa m'embêter de rester bloquer, je suis persuader que l'on doit pouvoir faire plein de chose avec les script.
-----geo-----
Messages postés
333
Date d'inscription
jeudi 7 juin 2012
Statut
Membre
Dernière intervention
29 mai 2014
59
22 juin 2012 à 15:42
22 juin 2012 à 15:42
tu n'imagine pas si bien dire^^' et oui zipe31 ta raison j'avais zapé les crochets x)
19 juin 2012 à 22:22
Maintenant la deuxième partit.....je bloque un peut....mes s'y je comprend, il ne faut pas que je fixe m'a valeur a "nom="Blanche" le "nom" et "Blanche" sont correcte mes pas "=" sinon le nom sera toujours égal a blanche. Je pence qu'un petit "man test" me dira ce qu'il faut
20 juin 2012 à 08:19
il ne faut pas que je fixe m'a valeur a "nom="Blanche" le "nom" et "Blanche" sont correcte mes pas "=" sinon le nom sera toujours égal a blanche.
Effectivement il ne faut pas fixer de nom à l'avance, par contre après la saisie du nom il te faut tester l'existence de la variable "${nom}" ou du moins t'assurer que celle-ci n'est pas vide.
man bash : Développement
20 juin 2012 à 15:57
21 juin 2012 à 11:13