Les commande "if" débutant en bash
guigui
-
-----geo----- Messages postés 333 Date d'inscription Statut Membre Dernière intervention -
-----geo----- Messages postés 333 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je vient m'adresser ici, car je suis débutant dans les script.
J'ai suivie le tutoriel de " Le site du zéro " (qui fond de très bon tutoriel) mes les script avec "if et elif " j'ai beaucoup de peine a comprendre le principe, j'ai rechercher sur internet des site qui expliquer avec beaucoup d'exemple réele de script, hors je me suis rendu compte que la plupart des site sont pour des gents qui s'y connaisse....
Auriez vous des sites qui fond de bon tutoriel voir même des exercices !!
Ceci étant je veut fair un script tout simple, l'ordinateur pose une question et on doit lui réponde ( le truc tout bête)
1 #!/bin/bash
2 read -p "Bonjour quel est votre nom ? : "
3 #l'ordi attend une réponse de l'utilisateur .
4 nom="Blanche"
5 #la valeur est donc "Blanche"
6 if [ $nom = "Blanche" ]
7 # ses mon test, si l'utilisateur ne rentre pas le nom de "Blanche" le test est faut donc arrêt le if
8 then
9 echo "Salut Blanche"
10 fi
Bon ce script quand je le lance marche bien, si on rentre = Blanche l'ordi nous répond , mes si je rentre Guillaume il repond aussi !!
Je pence que mon script comporte l'erreur au niveau du "test" le reste étant juste.
J'accepte toute remarque, aide, correction, voie a suivre, pour évoluer. Je trouve sa super donc je voudrais pas rester sur une échec.
Merci a vous, et de votre aide
Je vient m'adresser ici, car je suis débutant dans les script.
J'ai suivie le tutoriel de " Le site du zéro " (qui fond de très bon tutoriel) mes les script avec "if et elif " j'ai beaucoup de peine a comprendre le principe, j'ai rechercher sur internet des site qui expliquer avec beaucoup d'exemple réele de script, hors je me suis rendu compte que la plupart des site sont pour des gents qui s'y connaisse....
Auriez vous des sites qui fond de bon tutoriel voir même des exercices !!
Ceci étant je veut fair un script tout simple, l'ordinateur pose une question et on doit lui réponde ( le truc tout bête)
1 #!/bin/bash
2 read -p "Bonjour quel est votre nom ? : "
3 #l'ordi attend une réponse de l'utilisateur .
4 nom="Blanche"
5 #la valeur est donc "Blanche"
6 if [ $nom = "Blanche" ]
7 # ses mon test, si l'utilisateur ne rentre pas le nom de "Blanche" le test est faut donc arrêt le if
8 then
9 echo "Salut Blanche"
10 fi
Bon ce script quand je le lance marche bien, si on rentre = Blanche l'ordi nous répond , mes si je rentre Guillaume il repond aussi !!
Je pence que mon script comporte l'erreur au niveau du "test" le reste étant juste.
J'accepte toute remarque, aide, correction, voie a suivre, pour évoluer. Je trouve sa super donc je voudrais pas rester sur une échec.
Merci a vous, et de votre aide
A voir également:
- Les commande "if" débutant en bash
- Invite de commande - Guide
- Commande terminal mac - Guide
- Commande dism - Guide
- Logiciel de programmation pour débutant - Guide
- Diskpart commande - Guide
9 réponses
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.
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
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?
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
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.
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
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