Aller au contenu

[Résolu][Bash]Script avec While buggé


mre0311

Messages recommandés

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

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

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

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 :transpi:

Lien vers le commentaire
Partager sur d’autres sites

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

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...