mre0311 Posté(e) le 29 novembre 2007 Partager Posté(e) le 29 novembre 2007 Bonjour J'ai fais un petit jeux en bash pour les cours, j'ai des erreurs à l'execution mais je ne les trouvent pas!! voici le code en question: #!/bin/bash #Jeu du nombre magique #Par E.Morier #Version 1.0 #29 Novembre 2007 #################### #Global declarations: #################### declare RAND #Variable du nombre magique declare ESSAI #Variable du nombre que l'utilisateur entre declare REG #Variable réponse "règle du jeu" declare TANT #Variable du nombre de tentative #Test de paramètre: #################### #Aucun paramètre à tester! #Traitement: #################### RAND="$((RANDOM%101))" #Création du nombre magique (entre 0 et 100) echo echo "***********************" echo "Jeux du nombre magique!" echo "***********************" echo echo echo "Si vous voulez connaitre les règles du jeux taper \"r\"" read REG if test "$REG" = "r"; then #Affiche les règles si l'utilisateur entre "r" echo echo echo echo "Un nombre magique à été créé(compris entre 0 et 100), le but du jeu est de trouver sa valeure." echo "Vous avez pour cela 3 essais!" fi echo echo echo echo "Que le jeu commence, veuillez entrer votre nombre magique:" read ESSAI if test "$ESSAI" = "$RAND"; then #test si l'utilisateur a donné la bonne réponse echo "Bravo, Du Premier coup!!!" else #Sinon redemande à l'utilisateur un autre choix $TANT=1 #Tant que ces tentatives sont plus petite que 4 while "$TANT" < 4 do echo "Raté!" echo "Mais vous pouvez retenter votre chance echo echo "Entrer votre nombre magique:" read ESSAI if test "$ESSAI" = "$RAND"; then #test si l'utilisateur a donné la bonne réponse echo "Bravo! C\'est gagné!" "$TANT" =4 else let "$TANT" = "$TANT+1" #Sinon incrémente le nombre de tentative de 1 fi done fi #Test si le nombre de tentative est trop élevé if test "$TANT" = 4; then echo "Nombre de tentative maximum dépassé" echo "Vous avez perdu" fi #Nettoyage: #################### unset RAND unset ESSAI unset REG unset TANT Merci de votre aide Lien vers le commentaire Partager sur d’autres sites More sharing options...
BreizFenrir Posté(e) le 29 novembre 2007 Partager Posté(e) le 29 novembre 2007 Tout d'abord bravo pour ce code très propre, c'est un réel plaisir que de le lire. Ensuite, personellement je n'utilise ni declare, ni let ni unset dans les scripts que je développe. J'imagine que ta façon de faire est plus propre, et pour ce que j'en sais tout ça est bien utilisé donc les problèmes ne viendraient pas de là. Le problème qui se pose par contre est la ligne suivante : "$TANT" =4 Je ne sais pas ce que tu essayais de faire avec, mais en gros elle va affecter la valeur 4 à une variable qui va s'appeler 1, 2, 3 ou 4. TANT ne sera pas changé. Pour que cela soit le cas, remplace par : TANT=4 Bon après quand je vois le reste du code, j'ai l'impression qu'il ne s'agit que d'un copier/coller malheureux. Il y a quelques autres erreurs dans ton code qui sont plutôt de l'ordre du détail : - le code peut être optimisé en intégrant toutes les comparaisons valeur donnée / valeur à deviner au sein de la boucle while - si tu affecte la valeur 4 à la variable TANT pour sortir de la boucle quand le joueur réussit, le code lui affichera tout de même "vous avez perdu" Lien vers le commentaire Partager sur d’autres sites More sharing options...
mre0311 Posté(e) le 29 novembre 2007 Auteur Partager Posté(e) le 29 novembre 2007 Bon après quand je vois le reste du code, j'ai l'impression qu'il ne s'agit que d'un copier/coller malheureux. Je suis pas sur de comprendre se que tu dit la... Sinon j'ai modifié mon code comme ceci: #!/bin/bash #Jeu du nombre magique #Par E.Morier #Version 1.0 #29 Novembre 2007 #################### #Global declarations: #################### declare RAND #Variable du nombre magique declare ESSAI #Variable du nombre que l'utilisateur entre declare REG #Variable réponse "règle du jeu" declare TANT #Variable du nombre de tentative #Test de paramètre: #################### #Aucun paramètre à tester! #Traitement: #################### RAND="$((RANDOM%101))" #Création du nombre magique (entre 0 et 100) echo echo "***********************" echo "Jeux du nombre magique!" echo "***********************" echo echo echo "Si vous voulez connaitre les règles du jeux taper \"r\"" read REG if test "$REG" = "r"; then #Affiche les règles si l'utilisateur entre "r" echo echo echo echo "Un nombre magique à été créé(compris entre 0 et 100), le but du jeu est de trouver sa valeure." echo "Vous avez pour cela 3 essais!" fi echo echo echo echo "Que le jeu commence, veuillez entrer votre nombre magique:" read ESSAI if test "$ESSAI" = "$RAND"; then #test si l'utilisateur a donné la bonne réponse echo "Bravo, Du Premier coup!!!" else #Sinon redemande à l'utilisateur un autre choix TANT=1 #Tant que ces tentatives sont plus petite que 4 while ( $TANT < 4 ) do echo "Raté!" echo "Mais vous pouvez retenter votre chance" echo echo "Entrer votre nombre magique:" read ESSAI if test "$ESSAI" = "$RAND"; then #test si l'utilisateur a donné la bonne réponse echo "Bravo! C est gagné!" TANT=4 else let TANT = "$TANT+1" #Sinon incrémente le nombre de tentative de 1 fi done fi #Test si le nombre de tentative est trop élevé if test "$TANT" = 4; then echo "Nombre de tentative maximum dépassé" echo "Vous avez perdu" fi #Nettoyage: #################### unset RAND unset ESSAI unset REG unset TANT Et quand je l'exécute il m'affiche ceci: $ ./NbrMag.sh *********************** Jeux du nombre magique! *********************** Si vous voulez connaitre les règles du jeux taper "r" r Un nombre magique à été créé(compris entre 0 et 100), le but du jeu est de trouver sa valeure. Vous avez pour cela 3 essais! Que le jeu commence, veuillez entrer votre nombre magique: 22 ./NbrMag.sh: line 52: 4: No such file or directory J'y comprend plus rien, chaque fois que je corrige qqch il me sort une nouvelle erreur Lien vers le commentaire Partager sur d’autres sites More sharing options...
lorinc Posté(e) le 29 novembre 2007 Partager Posté(e) le 29 novembre 2007 quand c'est gagné, tu ne veux pas quitter plutôt que mettre TANT à 4 (ce qui va afficher "vous avez perdu" à l'utilisateur juste après...) ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
mre0311 Posté(e) le 29 novembre 2007 Auteur Partager Posté(e) le 29 novembre 2007 Hum oui en effet c'est un peu idiot... J'avais mis sa pour sortir de la boucle... je dois mettre "exit" à la place? Sinon je trouve toujours pas cette erreur de ****** Lien vers le commentaire Partager sur d’autres sites More sharing options...
BreizFenrir Posté(e) le 30 novembre 2007 Partager Posté(e) le 30 novembre 2007 Il faudrait que tu rejettes un coup d'oeil à la documentation de bash, mre0311. Ce n'est pas comme ça que l'on définit la condition de continuation dans une boucle while. L'instruction while est normalement suivi par une commande, c'est pourquoi le shell tente d'exécuter 1 < 4 à l'arrivée au début de la boucle. Il faut là encore que tu utilises l'instruction test, que ça soit dans sa version normale ou réduite (où en fait tu places la condition entre des crochets, bash appelant test tout seul comme un grand en lisant ça). Garde cette page sous la main, tu devrais pouvoir corriger les problèmes restant sans trop de mal. Lien vers le commentaire Partager sur d’autres sites More sharing options...
mre0311 Posté(e) le 30 novembre 2007 Auteur Partager Posté(e) le 30 novembre 2007 Merci !!! cela fonctionne enfin Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.