Script

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
Configuration: Linux
Konqueror 3.4

7 réponses

  1. 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
    1. <#!/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
      1. #!/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
        1. Modérateur
          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
          1. 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
            1. Modérateur
              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
          2. Modérateur
            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
            1. 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
              1. Modérateur
                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