Partage
  • Partager sur Facebook
  • Partager sur Twitter

Exercice 5 - Langstat

Reprenez le contrôle à l'aide de Linux !

    22 avril 2019 à 12:31:02

    Bonjour, 

    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 ]
    

    • Partager sur Facebook
    • Partager sur Twitter
      22 avril 2019 à 20:32:41

      salut,

      • 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.
      • Partager sur Facebook
      • Partager sur Twitter

      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.
      • Editeur
      • Markdown