[Bash] Probleme variables
Résolu
Utilisateur anonyme
-
Utilisateur anonyme -
Utilisateur anonyme -
Bonjour a tous
Je "programme" 2-3 trucs simples en Bash sous Ubuntu pour m'entrainer, car je débute.
J'ai voulu faire un QCM (inutile, mais juste pour s'entrainer) qui se gère comme ceci :
10 questions
4 suggestions (a,b,c,d) + possibilité de passer la questoin (p)
1 réponses justes : + 2 points
1 réponses fausses : -1 point
Pas de réponses : 0
Le QCM calcul le score, et dit combien il y a eu de réponses justes, de fausses et de passées.
Le scre se calcul bien, les réponses justes et fausses aussi.
Mais les réponses passées ne sont pas comptées comme passées, mais comme fausses...
Je ne trouve pas d'ou vient l'erreur...
Voici le code :
Je sais que le code est "brouillon", j'ai l'intention de le refaire plus propre, grâce à des fonctions...
Mais j'aimerais déjà savoir pourquoi il ne marche pas comme cela.
Cordialement
H4RDW4RE
Je "programme" 2-3 trucs simples en Bash sous Ubuntu pour m'entrainer, car je débute.
J'ai voulu faire un QCM (inutile, mais juste pour s'entrainer) qui se gère comme ceci :
10 questions
4 suggestions (a,b,c,d) + possibilité de passer la questoin (p)
1 réponses justes : + 2 points
1 réponses fausses : -1 point
Pas de réponses : 0
Le QCM calcul le score, et dit combien il y a eu de réponses justes, de fausses et de passées.
Le scre se calcul bien, les réponses justes et fausses aussi.
Mais les réponses passées ne sont pas comptées comme passées, mais comme fausses...
Je ne trouve pas d'ou vient l'erreur...
Voici le code :
#!/bin/sh # Je note les questions, suggestions et réponses en variables au début pour qu'on puisse les changers facilement sans parcourir tout le code... # # DELCARATION VARIABLES (QUESTIONS, CHOIX, REPONSES...) # # QUESTION 1 : QUESTION1="En quelle annee le langage C est-il apparu dans les laboratoires Bell ?" X1="a) 1969 b) 1972 c) 1975 d) 1978 p) Passer la question" ANSWER1="b" #QUESTION 2 : QUESTION2="Quelle est la frequence du sifflet utilise par John Drapper pour pirater le telephone ?" X2="a) 2200 Hz b) 2400 Hz c) 2600 Hz d) 2800 Hz p) Passer la question" ANSWER2="c" # QUESTION 3 : QUESTION3="Qui a developpe le langage C++ dans les annees 1980 ?" X3="a) Dennis Ritchie b) Ken Thompson c) Rasmus Lerdorf d)Bjarne Stroustrup p) Passer la question" ANSWER3="d" #QUESTION 4 : QUESTION4="Qui est a l'origine de l'implantation du protocol AX.25 dans le kernel Linux ?" X4="a) Richard Stallman b) Alan Cox c) Linus Torvalds d) Tim Berners-Lee p) Passer la question" ANSWER4="b" #QUESTION 5 : QUESTION5="Quelle est la valeur de la variable 'x' quelques minutes apres le lancement du programme ?" # Remarque : le code est dans : "question_5-C_code" que j'affiche grâce à la commmande "cat". X5="a) 0 b) 1 c) Impossible de savoir sa valeur d) 1447 p) Passer la question" ANSWER5="c" #QUESTION 6 : QUESTION6="Sous Linux Ubuntu, quelle commande (shell) permet d'installer lle paquet 'amsn' ?" X6="a) yum install amsn b) synaptic install amsn c) sudo amsn d) sudo apt-get install amsn p) Passer la question" ANSWER6="d" #QUESTION 7 : QUESTION7="Quel commutateur de la commande 'NETSTAT' (commande DOS) ppermet d'afficher les adresses et numeros de ports en format numérique ?" X7="a) -a b) -n c) -b d) -s p) Passer la question" ANSWER7="b" #QUESTION 8 : QUESTION8="Que vaut le mot de passe ?" # Remarque : le code est dans : "question_8-JS_code" que j'affiche grâce à la commmande "cat". X8="a) 12454578 b) 1447 c) 36 d) 0336 p) Passer la question" ANSWER8="b" #QUESTION 9 : QUESTION9="Quelle est la valeur de la variable 'result' ?" # Remarque : le code est dans : "question_9-C_code" que j'affiche grâce à la commmande "cat". X9="a) 103 b) 1433 c) 0 d) 5 p) Passer la question" ANSWER9="d" #QUESTION 10 : QUESTION10="Qui etait le plus grand rival de l'expert en informatique Tsutomu Shimomura ?" X10="a) Adrian Lamo b) Kevin Poulsen c) Kevin Mitnick d) Jonathan James p) Passer la question" ANSWER10="c" SCORE=0 TRUE=0 FALSE=0 SKIP=0 # # DEBUT DU CODE # clear echo echo "QCM Hacking [Bash Version]" echo echo echo "Une bonne reponse : +2 points" echo "Une mauvaise reponse : -1 point" echo "Pas de reponse (passer la question) : 0" echo "Reponses en majuscules et reponses autres que 'a, b, c, d, p' : faux (-1 point)" echo echo echo echo "Question 1/10" echo echo "$QUESTION1" echo echo "$X1" echo read -p "Votre choix : " REQUEST1 clear echo echo "Question 2/10" echo echo "$QUESTION2" echo echo "$X2" echo read -p "Votre choix : " REQUEST2 clear echo echo "Question 3/10" echo echo "$QUESTION3" echo echo "$X3" echo read -p "Votre choix : " REQUEST3 clear echo echo "Question 4/10" echo echo "$QUESTION4" echo echo "$X4" echo read -p "Votre choix : " REQUEST4 clear echo echo "Question 5/10" echo echo "$QUESTION5" echo cat "./Question_5-C_code" echo echo "$X5" echo read -p "Votre choix : " REQUEST5 clear echo echo "Question 6/10" echo echo "$QUESTION6" echo echo "$X6" echo read -p "Votre choix : " REQUEST6 clear echo echo "Question 7/10" echo echo "$QUESTION7" echo echo "$X7" echo read -p "Votre choix : " REQUEST7 clear echo echo "Question 8/10" echo echo "$QUESTION5" echo cat "./Question_8-JS_code" echo echo "$X8" echo read -p "Votre choix : " REQUEST8 clear echo echo "Question 9/10" echo echo "$QUESTION9" echo cat "./Question_9-C_code" echo echo "$X9" echo read -p "Votre choix : " REQUEST9 clear echo echo "Question 10/10" echo echo "$QUESTION10" echo echo "$X10" echo read -p "Votre choix : " REQUEST10 # # CALCULS SCORE ET STATUS DES QUESTIONS (JUSTES, FAUSSES, PASSEES) # clear # QUESTION 1 if [ $REQUEST1 = $ANSWER1 ]; then SCORE=$(($SCORE+2)) TRUE=$(($TRUE+1)) elif [$REQUEST1 = "p" ]; then SKIP=$(($SKIP+1)) else SCORE=$(($SCORE-1)) FALSE=$(($FALSE+1)) fi # QUESTION 2 if [ $REQUEST2 = $ANSWER2 ]; then SCORE=$(($SCORE+2)) TRUE=$(($TRUE+1)) elif [$REQUEST2 = "p" ]; then SKIP=$(($SKIP+1)) else SCORE=$(($SCORE-1)) FALSE=$(($FALSE+1)) fi # QUESTION 3 if [ $REQUEST3 = $ANSWER3 ]; then SCORE=$(($SCORE+2)) TRUE=$(($TRUE+1)) elif [$REQUEST3 = "p" ]; then SKIP=$(($SKIP+1)) else SCORE=$(($SCORE-1)) FALSE=$(($FALSE+1)) fi # QUESTION 4 if [ $REQUEST4 = $ANSWER4 ]; then SCORE=$(($SCORE+2)) TRUE=$(($TRUE+1)) elif [$REQUEST4 = "p" ]; then SKIP=$(($SKIP+1)) else SCORE=$(($SCORE-1)) FALSE=$(($FALSE+1)) fi # QUESTION 5 if [ $REQUEST5 = $ANSWER5 ]; then SCORE=$(($SCORE+2)) TRUE=$(($TRUE+1)) elif [$REQUEST5 = "p" ]; then SKIP=$(($SKIP+1)) else SCORE=$(($SCORE-1)) FALSE=$(($FALSE+1)) fi # QUESTION 6 if [ $REQUEST6 = $ANSWER6 ]; then SCORE=$(($SCORE+2)) TRUE=$(($TRUE+1)) elif [$REQUEST6 = "p" ]; then SKIP=$(($SKIP+1)) else SCORE=$(($SCORE-1)) FALSE=$(($FALSE+1)) fi # QUESTION 7 if [ $REQUEST7 = $ANSWER7 ]; then SCORE=$(($SCORE+2)) TRUE=$(($TRUE+1)) elif [$REQUEST7 = "p" ]; then SKIP=$(($SKIP+1)) else SCORE=$(($SCORE-1)) FALSE=$(($FALSE+1)) fi # QUESTION 8 if [ $REQUEST8 = $ANSWER8 ]; then SCORE=$(($SCORE+2)) TRUE=$(($TRUE+1)) elif [$REQUEST8 = "p" ]; then SKIP=$(($SKIP+1)) else SCORE=$(($SCORE-1)) FALSE=$(($FALSE+1)) fi # QUESTION 9 if [ $REQUEST9 = $ANSWER9 ]; then SCORE=$(($SCORE+2)) TRUE=$(($TRUE+1)) elif [$REQUEST9 = "p" ]; then SKIP=$(($SKIP+1)) else SCORE=$(($SCORE-1)) FALSE=$(($FALSE+1)) fi # QUESTION 10 if [ $REQUEST10 = $ANSWER10 ]; then SCORE=$(($SCORE+2)) TRUE=$(($TRUE+1)) elif [$REQUEST10 = "p" ]; then SKIP=$(($SKIP+1)) else SCORE=$(($SCORE-1)) FALSE=$(($FALSE+1)) fi # # AFFICHAGE SCORE ET STATUS QUESTIONS # clear echo echo "Score : $SCORE / 20" echo echo "Reponses justes : $TRUE / 10" echo "Reponses fausses : $FALSE / 10" echo "Reponses passees : $SKIP / 10" echo echo "Appuyez sur <Entree> pour continuer..." read KEY case $KEY in *) ;; esac
Je sais que le code est "brouillon", j'ai l'intention de le refaire plus propre, grâce à des fonctions...
Mais j'aimerais déjà savoir pourquoi il ne marche pas comme cela.
Cordialement
H4RDW4RE
A voir également:
- [Bash] Probleme variables
- Bingo bash free - Télécharger - Divers Jeux
- Bash list ✓ - Forum Shell
- Bash pause ✓ - Forum Shell
- Bash permission non accordée - Forum Shell
- Bash addition - Forum Programmation
4 réponses
Ben je sais pas, j'ai toujours fais comme sa... Cest pour delimiter la condition.
J'ai fait des autres Bash avec des ";" à la fin de mes conditions, et ils marchent très bien !
Sans les ";", au momment du calcul, le bash se ferme automatiquement.
J'ai appris selon des tutos qui disent qu'il faut mettre sa condition suivit d'un ";", puis le "then" et mettre les commandes en dessous qui seront exécuté ou non selon la condition...
J'ai fait des autres Bash avec des ";" à la fin de mes conditions, et ils marchent très bien !
Sans les ";", au momment du calcul, le bash se ferme automatiquement.
J'ai appris selon des tutos qui disent qu'il faut mettre sa condition suivit d'un ";", puis le "then" et mettre les commandes en dessous qui seront exécuté ou non selon la condition...
Salut,
Il manque un espace après le crochet ouvrant de tous les "elif" :
Il manque un espace après le crochet ouvrant de tous les "elif" :
elif [$REQUEST1 = "p" ]; then <= BAD elif [ $REQUEST1 = "p" ]; then <= RIGHT;-))
Je suis trop bête...
Je le sais en plus, je l'ai fait correctement aux lignes
C'était tellement simple, que je n'ai pas vue l'erreur. Et pourtant je les relut le code...
J'ai fait la faute la première fois, et ensuite j'ai fais copier/coller en changeant juste les numéros des variables...
Merci beaucoup Jipicy de m'avoir ouvert les yeux =)
Bye
Je le sais en plus, je l'ai fait correctement aux lignes
if [ $REQUEST1 = $ANSWER1 ]; then
C'était tellement simple, que je n'ai pas vue l'erreur. Et pourtant je les relut le code...
J'ai fait la faute la première fois, et ensuite j'ai fais copier/coller en changeant juste les numéros des variables...
Merci beaucoup Jipicy de m'avoir ouvert les yeux =)
Bye