Script
mimi
-
jipicy Messages postés 41342 Statut Modérateur -
jipicy Messages postés 41342 Statut Modérateur -
voilà je dois faire un script qui est tout simple mais bon vu que je débute en linux je bloque:
c'est un script qui tester les connaissances sur les capitales du monde (comme c'est intéressant...^^)
on a deux façons d'appeler le script:
-quizz.sh -v ville - le script demande le nom du pays qui a pour capitale ville.
-quizz.sh -p pays - le script demande le nom de la capitale du pays.
J'ai un fichier (capitales.txt) où sont stockés les capitales sous la forme suivante:
France,Paris
Italie,Rome
Etc...
Si le fichier capitales.txt le script doit afficher une erreur.
S'il y a une erreur, le script doit afficher un message d'erreur.
Il doit ignorer les accents et majuscules
Poser plusieurs questions à la suite
Afficher un score et l'enregistrer dans un fichier
J'ai passé plusieurs heures dessus et je n'arrive à rien (où quasiement) et donc j'aimerais bien savoir comment faire.
Merci beaucoup
c'est un script qui tester les connaissances sur les capitales du monde (comme c'est intéressant...^^)
on a deux façons d'appeler le script:
-quizz.sh -v ville - le script demande le nom du pays qui a pour capitale ville.
-quizz.sh -p pays - le script demande le nom de la capitale du pays.
J'ai un fichier (capitales.txt) où sont stockés les capitales sous la forme suivante:
France,Paris
Italie,Rome
Etc...
Si le fichier capitales.txt le script doit afficher une erreur.
S'il y a une erreur, le script doit afficher un message d'erreur.
Il doit ignorer les accents et majuscules
Poser plusieurs questions à la suite
Afficher un score et l'enregistrer dans un fichier
J'ai passé plusieurs heures dessus et je n'arrive à rien (où quasiement) et donc j'aimerais bien savoir comment faire.
Merci beaucoup
A voir également:
- Script
- Script vidéo youtube - Guide
- Ghost script - Télécharger - Polices de caractères
- Mas script - Accueil - Windows
- Script cmd - Guide
- Script download - Télécharger - Édition & Programmation
7 réponses
comme tu y a passé plusieurs heures , tu dois bien avoir fait quelque chose ; par exemple la lecture/verification des arguments ou la lecture du fichier.
Montre nous ce que tu as fais si tu veux de l'aide (on ne va pas et faire ton exercice).
Montre nous ce que tu as fais si tu veux de l'aide (on ne va pas et faire ton exercice).
<#!/home/knoppix/quizz.sh
element1=$(expr "abcd,efgh" : "\(.*\),.*") && element2=(expr "abcd,efgh" : ".*,\(.*\)")
read a
if
a='-v'
echo "Quel est le pays qui a pour capitale $element1 ?"
else if
a='-p'
echo "Quel est la capitale du $element2 ?"
else
echo "Vous devez taper soit -v ville soit -p pays."#!/home/knoppix/quizz.sh
element1=$(expr "abcd,efgh" : "\(.*\),.*") && element2=(expr "abcd,efgh" : ".*,\(.*\)")
read a
if
a='-v'
echo "Quel est le pays qui a pour capitale $element1 ?"
else if
a='-p'
echo "Quel est la capitale du $element2 ?"
else
echo "Vous devez taper soit -v ville soit -p pays."
voilà ce que j'ai tapé mais bien sur c'est faux, c'est nul etc...
Le problème c'est que je sais pas comment chargé une ligne de mon fichier texte et intégrer ces variables dans mon script.
J'ai pensé avec la commande grep mais je bloque...
element1=$(expr "abcd,efgh" : "\(.*\),.*") && element2=(expr "abcd,efgh" : ".*,\(.*\)")
read a
if
a='-v'
echo "Quel est le pays qui a pour capitale $element1 ?"
else if
a='-p'
echo "Quel est la capitale du $element2 ?"
else
echo "Vous devez taper soit -v ville soit -p pays."#!/home/knoppix/quizz.sh
element1=$(expr "abcd,efgh" : "\(.*\),.*") && element2=(expr "abcd,efgh" : ".*,\(.*\)")
read a
if
a='-v'
echo "Quel est le pays qui a pour capitale $element1 ?"
else if
a='-p'
echo "Quel est la capitale du $element2 ?"
else
echo "Vous devez taper soit -v ville soit -p pays."
voilà ce que j'ai tapé mais bien sur c'est faux, c'est nul etc...
Le problème c'est que je sais pas comment chargé une ligne de mon fichier texte et intégrer ces variables dans mon script.
J'ai pensé avec la commande grep mais je bloque...
#!/home/knoppix/quizz2.sh
element1=$(expr "*,*" : "\(.*\),.*") && element2=(expr "*,*" : ".*,\(.*\)")
grep $element1 /home/knoppix/capitales.txt
read a
a='-v $element1'
echo "Quel est le pays qui a pour capitale $element1" ?
read b
if b=$element1
then echo "ok"
else
echo "erreur"
exit<ital>#!/home/knoppix/quizz2.sh
element1=$(expr "*,*" : "\(.*\),.*") && element2=(expr "*,*" : ".*,\(.*\)")
grep $element1 /home/knoppix/capitales.txt
read a
a='-v $element1'
echo "Quel est le pays qui a pour capitale $element1" ?
read b
if b=$element1
then echo "ok"
else
echo "erreur"
exit</ital>
ça donne pas grand chose non plus...
ya personne qui pourrait me donner un petit coup de pouce (je demande pas comment tout faire mais 2-3petits trucs pour m'aider à me débrouiller ssvp)
merci
element1=$(expr "*,*" : "\(.*\),.*") && element2=(expr "*,*" : ".*,\(.*\)")
grep $element1 /home/knoppix/capitales.txt
read a
a='-v $element1'
echo "Quel est le pays qui a pour capitale $element1" ?
read b
if b=$element1
then echo "ok"
else
echo "erreur"
exit<ital>#!/home/knoppix/quizz2.sh
element1=$(expr "*,*" : "\(.*\),.*") && element2=(expr "*,*" : ".*,\(.*\)")
grep $element1 /home/knoppix/capitales.txt
read a
a='-v $element1'
echo "Quel est le pays qui a pour capitale $element1" ?
read b
if b=$element1
then echo "ok"
else
echo "erreur"
exit</ital>
ça donne pas grand chose non plus...
ya personne qui pourrait me donner un petit coup de pouce (je demande pas comment tout faire mais 2-3petits trucs pour m'aider à me débrouiller ssvp)
merci
Salut,
Tiens voilà un bout de code qui tient compte de tes exigences (mais pas dans toutes leurs finalités), à savoir ne pas tenir compte des accents et de la "casse" (majuscule/minuscule) dans les réponses fournies (mais pas dans le fichier texte contenant les Pays et Capitales, du moins pas en ce qui concerne les accents).
Il ne tient pas compte par contre du score et de son enregistrement...
;-))
Tiens voilà un bout de code qui tient compte de tes exigences (mais pas dans toutes leurs finalités), à savoir ne pas tenir compte des accents et de la "casse" (majuscule/minuscule) dans les réponses fournies (mais pas dans le fichier texte contenant les Pays et Capitales, du moins pas en ce qui concerne les accents).
Il ne tient pas compte par contre du score et de son enregistrement...
#!/bin/bash # Gestion des options et des paramètres while getopts ":p:v:" OPTION do case $OPTION in p) # gestion des capitales - option "p" echo "Quelle est la capitale du (de la) $2 ?" read reponse # Élimination des accents et des majuscules reponse_clean=$(echo $reponse | tr "àçéèêëîïôöùüÂÇÉÈÊËÎÏÔÖÙÜ" "aceeeeiioouuACEEEEIIOOUU"\ | tr "[:upper:]" "[:lower:]") # Affectation de la bonne réponse à la variable "capitale" capitale=$(grep -i $2 fichier.txt | cut -d"," -f2 |tr "[:upper:]" "[:lower:]") echo # Test de la réponse avec la variable de comparaison if [ "$reponse_clean" = "$capitale" ] then echo "Bravo" else echo "Désolé, la bonne réponse était : $capitale" fi ;; v) # gestion des pays - option "v" echo "Quel pays a pour capitale $2 ?" read reponse reponse_clean=$(echo $reponse | tr "àçéèêëîïôöùüÂÇÉÈÊËÎÏÔÖÙÜ" "aceeeeiioouuACEEEEIIOOUU"\ | tr "[:upper:]" "[:lower:]") capitale=$(grep -i $2 fichier.txt | cut -d"," -f1 |tr "[:upper:]" "[:lower:]") echo if [ "$reponse_clean" = "$capitale" ] then echo "Bravo" else echo "Désolé, la bonne réponse était : $capitale" fi ;; :) # gestion d'absence de paramètre echo "Vous devez fournir une capitale ou un pays..." echo echo "Usage : quizz.sh [option] [paramètre]" echo ;; \?) # gestion d'option incorrecte echo "Option incorrecte $OPTARG" echo echo "Usage : quizz.sh [option] [paramètre]" echo "Options = -p (Pays) ou -v (Capitale)" echo ;; esac doneN'oublie pas de changer le fichier "fichier.txt" par ton fichier contenant le nom des pays et des capitales...
;-))
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
J' étais en train de rediger un message pour lui donner des pistes , mais vu que tu lui a donné le script tout fait ... Il ne comprendra rien à ce qui est fait et cet exercice n'aura servit à rien en somme . Il ne saura pas plus faire un script
Salut,
J' étais en train de rediger un message pour lui donner des pistes , mais vu que tu lui a donné le script tout fait ...
Rien et personne ne t'empêche d'écrire ton message :-))
J' étais en train de rediger un message pour lui donner des pistes , mais vu que tu lui a donné le script tout fait ...
Rien et personne ne t'empêche d'écrire ton message :-))
Bon déjà merci beaucoup à tout le monde. (surtout jipicy^^)
Ensuite c'est vrai que je demandais pas non plus tout le travail, du coup je culpabilise un peu.
Mais je me contente pas de recopier bêtement j'essaye de comprendre, du coup j'ai quelques questions:
par ex pour la ligne:
p) # gestion des capitales - option "p"
le dièse (#) marqu'il s'agit d'un commentaire (et n'est donc pas obligatoire pour faire fonctionner le script)?
le "esac" à la fin est pour marquer la fin du "case"?
Ne puis-je pas mettre de "default" après les 2premiers cas tout simplement?
Et une autre question par rapport au scripts (mais pas celui là), cpeut-on utiliser un "elsif" avec un script et si oui comment?
Ensuite c'est vrai que je demandais pas non plus tout le travail, du coup je culpabilise un peu.
Mais je me contente pas de recopier bêtement j'essaye de comprendre, du coup j'ai quelques questions:
par ex pour la ligne:
p) # gestion des capitales - option "p"
le dièse (#) marqu'il s'agit d'un commentaire (et n'est donc pas obligatoire pour faire fonctionner le script)?
le "esac" à la fin est pour marquer la fin du "case"?
Ne puis-je pas mettre de "default" après les 2premiers cas tout simplement?
Et une autre question par rapport au scripts (mais pas celui là), cpeut-on utiliser un "elsif" avec un script et si oui comment?
Re-
par ex pour la ligne:
p) # gestion des capitales - option "p"
le dièse (#) marqu'il s'agit d'un commentaire (et n'est donc pas obligatoire pour faire fonctionner le script)?
Effectivement c'est un commentaire et il n'est pas obligatoire. J'aurai dû le mettre au dessus et non pas sur la même ligne... oups ;-))
le "esac" à la fin est pour marquer la fin du "case"?
Oui.
Ne puis-je pas mettre de "default" après les 2premiers cas tout simplement?
C'est un peu plus compliqué là. Les deus options ( le deux points (:) et le point d'interrogation protégé (\?) sont en fait spécifiques à la commande "getopts".
En règle générale la fonction "case/esac" prend effectivement une option "defaut" symbolisé par l'astérisque (*) pour traiter tout ce qui ne correspond pas aux options précédemment citées.
Et une autre question par rapport au scripts (mais pas celui là), peut-on utiliser un "elsif" avec un script et si oui comment?
En fait c'est "elif" (et non pas elsif) :
par ex pour la ligne:
p) # gestion des capitales - option "p"
le dièse (#) marqu'il s'agit d'un commentaire (et n'est donc pas obligatoire pour faire fonctionner le script)?
Effectivement c'est un commentaire et il n'est pas obligatoire. J'aurai dû le mettre au dessus et non pas sur la même ligne... oups ;-))
le "esac" à la fin est pour marquer la fin du "case"?
Oui.
Ne puis-je pas mettre de "default" après les 2premiers cas tout simplement?
C'est un peu plus compliqué là. Les deus options ( le deux points (:) et le point d'interrogation protégé (\?) sont en fait spécifiques à la commande "getopts".
En règle générale la fonction "case/esac" prend effectivement une option "defaut" symbolisé par l'astérisque (*) pour traiter tout ce qui ne correspond pas aux options précédemment citées.
Et une autre question par rapport au scripts (mais pas celui là), peut-on utiliser un "elsif" avec un script et si oui comment?
En fait c'est "elif" (et non pas elsif) :
if ... then ... elif ... then ... else ... fiTiens un bon lien pour l'apprentissage du bash ;-))