Voila j'ai créer un script dans le cadre de l'exercice 5 du cours sur Linux, et j'aimerais avoir vos avis et conseil sur mon code.
Que peut-on améliorer, changer ?
J'ai aussi peut être fait des erreurs ou bien on pourrait réduire la taille du code ?
Merci par avance a tous ceux qui me liront,
Cordialement,
#!/bin/bash
# Option de base help et v pour que l'utilisateur puisse ouvrir l'aide du programme ainsi que ca version.
# L'utilisation du programme est décrite dans le help pour plus d'information tape la commande langstat.sh --help
if [ $1 = "--help" ]
then
echo "
Utilisation : langstat [FICHIER]... [OPTION]... [OPTION]...
Example: langstat dico.txt --chco -R
Permet de créer des statistiques sur l'utilisation des lettres dans une langue.
Pour cela, vous allez devoir vous baser sur un fichier de dictionnaire contenant tous les mots,
le dictionnaire doit contenir un mot par ligne et doit être un fichier de texte simple. (Dictionnaire.txt)
Exemple de dictionnaire:
Chat
chien
LUNE
rAt
Output control:
--croissant Permet l'affichage par ordre croisant de la lettre la moin utilise a celle le plus utilise.
--chco CHange les COlones, trie de la collone avec les lettre.
--debutant Permet de faire une recherche sur la 1 lettre des mots, créer une statistique des mot qui commande
par A, B, ... , X, Y, Z
Second Output control:
-R Permet d'inverser l'ordre de la colone.
Divers :
-v afficher le nom et la version du logiciel
--help afficher l'aide et quitter
"
elif [ $1 = "-v" ]
then
echo "
langstat (GNU) 1.0
Copyright 2019 Machko
Licence GPLv3+: GNU GPL Version 3 ou ultérieure <http://gnu.org/licenses/gpl.html>.
Logiciel libre : vous êtes libre de le modifier ou de le redistribuer.
Il n'y a AUCUNE GARANTIE, dans les limites autorisées par la loi.
Ecrit par Machko, <https://github.com/machko>"
#############################################################################################################################################
# #
# Description de la boucle principale du programme #
# #
# for l in {A..Z}; do Création d'un boucle ou la variable l prend suscessivement la valeur #
# A, B, C, ... ,X, Y, Z #
# #
# echo "`grep -i $l $1 | wc -w` - "$l On affiche a l'écran une recherche dans le fichier a l'aide de grep #
# avec l'option -i de grep on ignore la case si l'utilisateur n'a pas un dictionnaire #
# soit en majuscule ou minuscule pas de problème, on fait la recherche de la valeur de $l #
# dans $1 = fichier dictionnaire entrer par l'utilisateur, on envoie le tout dans #
# un wc qui nous compte le nombre de mot avec l'option -w. #
# #
# done | sort -nr On tri les données soit avec les lettres, soit numériquement, du plus petit au plus grand #
# ou inversement, option -r. #
# #
#############################################################################################################################################
elif [ -d $1 ]
then
echo "
Ceci est un dossier, il faut un dictionnaire taper la commande
./langstat.sh --help
pour plus d'information. "
else
# Test pour empecher un utilisateur d'utiliser un fichier dans le quel il ne peut pas lire et qui n'a pas l'extention txt et que celui-ci est bien present,
# et vérifie si c'est un dossier ou non. (voir le elif précédent) avec un message différents pour informer l'utilisateur.
if [ -n $1 ] && [ -e $1 ] && [ -r $1 ] && [ ${1##*.} = 'txt' ]
then
if [ -z $2 ]
then
for l in {A..Z}; do
echo "`grep -i $l $1 | wc -w` - "$l
done | sort -nr
elif [ $2 = "-R" ]
then
for l in {A..Z}; do
echo "`grep -i $l $1 | wc -w` - "$l
done | sort -n
else
# Utilisation d'un case pour facilité l'ajout, suppression ou modification d'une options.
# ATTENTION lors de l'ajout d'une nouvelle fonction prevoir un if pour le test du 3 parametre,
# qui ouvre une seconde rangé d'option.
case $2 in
"--croissant")
for l in {A..Z}; do
echo "`grep -i $l $1 | wc -w` - "$l
done | sort -n ;;
"--chco")
if [ -z $3 ]
then
for l in {A..Z}; do
echo $l" - `grep -i $l $1 | wc -w`"
done
elif [ $3 = "-R" ]
then
for l in {A..Z}; do
echo $l" - `grep -i $l $1 | wc -w`"
done | sort -r
else
echo "
Option de trie non valide taper la commande
./langstat.sh --help
pour plus d'information."
fi ;;
"--debutant")
if [ -z $3 ]
then
for l in {A..Z}; do
echo "`grep -i ^$l $1 | wc -w` - $l"
done | sort -rn
elif [ $3 = "-R" ]
then
for l in {A..Z}; do
echo "`grep -i ^$l $1 | wc -w` - $l"
done | sort -n
else
echo "
Option de trie non valide taper la commande
./langstat.sh --help
pour plus d'information. "
fi ;;
*)
echo "
Option invalide taper la commande
./langstat.sh --help
pour plus d'information. " ;;
esac
fi # Fermeture du if [ -z $2 ]
else
echo "
Erreur fichier manquant, ou non lisible ! Taper la commande
./langstat.sh --help
pour plus d'information. "
fi # Fermeture du if [ -n $1 ] && [ -e $1 ] && [ -r $1 ]
fi # Fermeture du if [ $1 = "--help" ] elif [ $1 = "-v" ] elif [ -d $1 ]
il faut toujours mettre les développements de paramètres entre guillemets
`...` est une forme vieillie de substitution de commandes qu'il vaut mieux remplacer par $(...)
si une commande est répétée (presque) à l'identique, il est bon d'en faire une fonction qui acceptera les différences en paramètres
la gestion des options peut être améliorée : ouvre un man au hasard, les options courtes reprennent (en général) les initiales des options longues.
Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique
Exercice 5 - Langstat
× 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