Script

Fermé
mimi - 12 déc. 2006 à 15:56
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 - 12 déc. 2006 à 22:43
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
A voir également:

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).
0
<#!/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...
0
#!/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
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
12 déc. 2006 à 20:43
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...
#!/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
done
N'oublie pas de changer le fichier "fichier.txt" par ton fichier contenant le nom des pays et des capitales...

;-))
0

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
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
12 déc. 2006 à 21:22
Rien ne t'empêche de lui donner des pistes malgré mon intervention.

Comme bien souvent des exemples sont beaucoup plus parlant que des explications... c'est la raison pour laquelle j'ai carrément mis un script tout "chiadé", mais hormis le "getopts" le reste c'est du traditionnel.
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
12 déc. 2006 à 21:26
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 :-))
0
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?
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
12 déc. 2006 à 22:43
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) :
if ... then ... elif ... then ... else ... fi
Tiens un bon lien pour l'apprentissage du bash ;-))

0