Partage
  • Partager sur Facebook
  • Partager sur Twitter

Question : script bash

    17 mai 2017 à 17:31:18

    Bonjour a tous ! au niveau du dernier exercice du cours "reprenez le controle à l'aide de linux" , on me demande de créér un script qui va analyser un dictionnaire.

    Au niveau du barème, il est mentionné  : << Ne pas laisser de fichier temporaire de travail sur le disque >>

    Comment interpréter cela ? ça signifie qu'il ne faut pas créer de fichier du tout ? ou on peut en créer  mais il faut absolument les supprimer avant la fin de l'exécution du script ?

    Merci d'avance !

    • Partager sur Facebook
    • Partager sur Twitter
      17 mai 2017 à 18:03:51

      salut,

      oui, c'est ça. ;)

      il faut « ne pas laisser de fichier temporaire ».
      ce que j'interprète comme « si vous en créez, supprimez-le(s) avant la fin du script »; ce qui peut être problématique si on interrompt le script avant qu'il se finisse. Alors, il faut gérer la suppression en capturant (trap) le signal d'interruption pour supprimer le(s) fichier(s) créé(s) avant de quitter.

      MAIS, l'exercice est tout à fait réalisable sans créer de fichier(s) temporaire(s) !

      il est d'ailleurs toujours préférable de ne pas créer de fichier temporaire.

      • Partager sur Facebook
      • Partager sur Twitter

      Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique

        17 mai 2017 à 18:23:59

        Merci bien ! dis c'est possible de stocker un echo dans un variable avec un flux de redirection ? jessais mais on me met redirection ambigue

        • Partager sur Facebook
        • Partager sur Twitter
          17 mai 2017 à 19:22:04

          montre-nous la commande.

          pas uniquement l'exécution du script.

          -
          Edité par dantonq 17 mai 2017 à 19:24:21

          • Partager sur Facebook
          • Partager sur Twitter

          Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique

          Anonyme
            18 mai 2017 à 11:24:29

            $ bash -x langstat2.sh dixo.txt
            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              19 mai 2017 à 3:06:03

              Le mieux serait de montrer le script bash, la visiblement, y'a un truc qui passe pas bien à la ligne 15.
              • Partager sur Facebook
              • Partager sur Twitter
                20 mai 2017 à 20:15:44

                j'ai le droit de poster mon résultat sur  ce forum ? je ne connais pas très bien les règles du site. Je me dis que d'autres peuvent faire un copier coller juste pour avoir le certificat du cours .

                Edit : eh bien depuis la dernière fois j’ai pu peaufiner mon code et vous pouvez voir le résultat final ci dessous (qu'en pensez vous ? ) ! Tout marche correctement mais j'aurais vraiment préferé remplacer ce fichier temporaire de travail "var.txt" par une variable $var.  J'ai réussi à le faire mais le résultat est confus . Tout s'affiche sur la même ligne comme ceci :

                278814---E 229938---A 219131---I 210391---R 207889---S 179165---N 176030---T 158282---O 108195---U 106300---L 98832---C 74421---M 72481---D 69141---P 48942---G 43471---B 36777---F 35940---H 34982---Z 30562---V 16340---Q 11030---Y 8262---X 5743---J 1595---K 529---W

                #!/bin/bash
                
                #vérification de l'existence du fichier temporaire de travail var.txt
                rep='~/var.txt'
                if [ -e $rep ]
                then
                	#si le fichier var.txt existe déja on le supprime	
                	rm ~/var.txt 2> /dev/null
                fi
                
                #vérification de l'existence du dictionnaire dico.txt et du paramètre $1
                if [ -z $1 ]
                then
                	#si $1 n'est pas saisit écrire:
                	echo "Veuillez saisir en paramètre 1 le chemin du dictionnaire à analyser"
                
                elif [ -n $1 ] && [ -d $1 ]
                then
                	#si $1 est un répertoire (dossier) écrire :
                	echo "erreur : $1 est un répertoire"
                
                elif [ -n $1 ] && [ ! -e $1 ]
                then
                	#si $1 est saisit mais le fichier dico.txt est inexistant écrire:
                	echo "Le fichier $1 est inexistant ou introuvable"
                
                elif [ -n $1 ] && [ -e $1 ] && [ ! -r $1 ]
                then
                	#vérification des droits sur $1
                	echo "pas d'accès en lecture sur $1"
                
                elif [ -n $1 ] && [ -e $1 ]
                then
                	#si $1 et le fichier dico.txt existent, on compte le nombre de mots utilisant chaque lettre de l'alphabet
                	for i in {A..Z}
                 	do
                		resultat=$(grep -i $i $1 | wc -l)
                		#on stock le resultat dans un fichier temporaire var.txt
                		echo "$resultat---$i" >> ~/var.txt 2> /dev/null	
                	done	
                	
                	#vérification du deuxieme paramètre $2. NB : ######## $2 permet d'inverser le resutat (de la lettre la moins utilisée à la plus utilisée)  ###########
                	if [ -n $2 ] && [ "$2" = "--inverse" ]
                	then
                		#si le paramètre $2 existe et est valide on affiche le contenu du fichier $2 de le lettre la moins utilisée à la plus utilisée
                		sort -n ~/var.txt
                
                	elif [ -n "$2" ] && [ "$2" != "--inverse" ]
                	then
                		#si le paramètre $2 existe et est invalide on affiche le contenu du fichier var.txt de la lettre la plus utilisée à la moins utilisée
                		sort -nr ~/var.txt
                		#et on previent l'utilisateur que le paramètre 2 est invalide
                		echo "le deuxième paramètre est invalide ! vérifiez la syntaxe !"
                	else
                		#résultat standard  : on affiche le contenu du fichier var.txt de la lettre la plus utilisée à la moins utilisée si $2 n'exsite pas
                		sort -nr ~/var.txt
                	fi
                
                fi
                
                #suppression du fichier temporaire de travail var.txt
                rm ~/var.txt 2> /dev/null
                



                -
                Edité par TidianeDem 20 mai 2017 à 22:28:05

                • Partager sur Facebook
                • Partager sur Twitter
                Anonyme
                  20 mai 2017 à 20:40:18

                  Bien mal acquis ne profite jamais  :ange:

                  Et vu que ton script à une erreur à la ligne 15... :-°

                  Et que si je me rappel bien, ton code ne donne pas la sortie demandée...

                  En vrai, je pense pas qu'il y est de problème, je ne suis pas sur ceci-dit.

                  Envoie ton code (avec la balise </>) et on peut que t'expliquer l'erreur pour que tu la comprennes et puisses la corriger, et si il faut on te donnera la correction par mp si tu veux pas «prendre de risque».

                  • Partager sur Facebook
                  • Partager sur Twitter
                    20 mai 2017 à 20:48:36

                    c'est pas très éthique de demander de l'aide sur la place publique (forum), et souhaiter une réponse par courrier individuel (mail privé) !

                    c'est même contraire à la netiquette.

                    de plus, ce sujet (comme tous ceux du cours en libre accès) a déjà été traité de nombreuses fois sur ce forum, et d'autres.

                    vous imaginez Linus Torvalds, en 1991, se demander s'il va partager son code, parce que B. Gates pourrait le recopier...
                    ?

                    -
                    Edité par dantonq 20 mai 2017 à 21:24:48

                    • Partager sur Facebook
                    • Partager sur Twitter

                    Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique

                    Anonyme
                      20 mai 2017 à 21:24:34

                      @datonq, pareil, de toute façon, si des gens viennent «tricher» aux petits exercices de cours d'openclassrooms, ils trichent juste sur eux-mêmes...

                      Et la différence quand même c'est qu'ici, c'est un site pour apprendre donc le doute Thom. est fondé, il demandait juste. Après, je trouve que lui expliquer plutôt que de lui rendre juste un copie corrigée c'est bénéfique pour tous.

                      EDIT:

                      Je suis obligé d'edit car je peux pas double post, t'aurais du poster ton code dans un nouveau post ;)

                      C'est étrange que tout soit affiché sur une seule ligne en sortie... T'as bien fait ça?

                      ./langstat.sh dico.txt

                       Et non pas:

                      echo `./langstat.sh dico.txt`

                      par exemple.

                      Sinon rien à dire sur le code, ça semble tt bon.

                      -
                      Edité par Anonyme 20 mai 2017 à 23:17:44

                      • Partager sur Facebook
                      • Partager sur Twitter
                        13 juin 2017 à 18:26:55

                        Bonjour, 

                        @TidianeDem si je ne me trompe pas , dans l'énoncé il est demandé de pouvoir ajouter un second paramètre à ce script comme par exemple afficher les résultats en pourcentage.

                        En ce qui me concerne, je n'arrive malheureusement pas à ajouter cette fonctionnalité supplémentaire

                        Merci d'avance

                        • Partager sur Facebook
                        • Partager sur Twitter
                        Anonyme
                          13 juin 2017 à 21:10:17

                          Bonjour,

                          @JimmyTwice, le mieux est que tu crées un nouveau sujet dans lequel tu postes ton code et que tu expliques ce qu'il est censé faire et ton problème. Si tu as des erreurs lors de l'exécution du script, poste les aussi.

                          • Partager sur Facebook
                          • Partager sur Twitter

                          Question : script bash

                          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                          • Editeur
                          • Markdown