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 ?
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.
Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique
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 :
#!/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
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».
@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?
@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
@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.
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.
Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique
Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique
Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique