IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Mon script est-il juste ?


Sujet :

Shell et commandes GNU

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2020
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2020
    Messages : 25
    Points : 24
    Points
    24
    Par défaut Mon script est-il juste ?
    Bonjour,
    je dois écrire un script Bash qui prend facultativement deux arguments : un répertoire & une extension (par exemple sh).
    Le script doit :
    -vérifier le nombre d’arguments (0 ou 2) et, s’il est 0 demander à l’utilisateur de les saisir ; ils seront nommés dans le script respectivement rep et ext ;
    -vérifier que $rep existe et qu’il soit bien un répertoire, sinon sortir ;
    -utiliser une boucle de type for pour compter dans le répertoire $rep :
    • les fichiers de type répertoire (fr) ;
    • les fichiers ordinaires (fo) ;
    • les fichiers d’extension $ext (fe) & parmi eux ceux qui sont exécutables (fex).
    -afficher les différents compteurs sur des lignes séparées.
    Je suis encore novice & j'aimerais donc que quelqu'un puisse me dire si mon script est correct :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    #! /bin/bash
    # nbfichiers.sh
     
    if (( $# = 0 ));then
            read rep
            read ext
    else
            rep=$1
            ext=$2
     
    if [ ! -d "$rep" ];then
            exit 1
     
    fr=0
    for i in $rep
    do
      if  [ -d "${rep[i]}" ]; then
              ((fr+=1))
     
    fo=0
    for i in $rep
    do
      if  [ -f "${rep[i]}" ]; then
              ((fo+=1))
     
    fe=0
    fex=0
    for i in $rep
    do
      if  [ -d "${rep[i]}" ]; then
              if  [ -x "${rep[i]}" ] && [ "${$ext##*.}" = "$ext" ]; then
                      ((fex+=1))
              ((fe+=1))
     
    echo $fo
    echo $fe
    echo $fex
    Merci d'avance de votre aide.

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 376
    Points
    19 376
    Par défaut
    Bonjour,

    quand tu l'exécutes,
    est-ce qu'il fonctionne sans erreurs ?
    et, fait-il ce qu'il est censé faire ?

    il est aberrant d'écrire un script sans savoir utiliser les commandes qui le composent.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2020
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2020
    Messages : 25
    Points : 24
    Points
    24
    Par défaut
    Bonjour,
    j'ai modifié un peu mon script :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    #! /bin/bash
    # nbfichiers.sh
     
    if [ "$#" -eq 0 ];then
            read rep
            read ext
    else
            rep=$1
            ext=$2
    fi
    if [ ! -d "$rep" ];then
            exit 1
    fi
    fr=0
    for i in $rep
    do
             if  [ -d "${rep[i]}" ];then
                       ((fr+=1))
             fi
    done
    fo=0
    for i in $rep
    do
             if  [ -f "${rep[i]}" ];then
                       ((fo+=1))
             fi
    done
    fe=0
    fex=0
    for i in $rep
    do
           if  [ -d "${rep[i]}" ];then
                     if  [ -x "${rep[i]}" ] && [ "${$ext##*.}" = "$ext" ];then
                               ((fex+=1))
                     ((fe+=1))
                     fi
           fi
    done
    echo $fr
    echo $fo
    echo $fe
    echo $fex
    Lors que j'exécute mon script avec par exemple Documents et txt (en sachant que dans ce dossier j'ai 1 dossier vide, 1 fichier sans extension & 1 fichier avec l'extension txt) et le script me renvoie fr=1, fo=0, fe=1 & fex=1.
    Je pense que le script est correct, dites-moi si il remplit bien les conditions.
    Je me demande juste ce que sont les caractéristiques d'un ficier "ordinaire" (sans ext) ?
    Merci

  4. #4
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 376
    Points
    19 376
    Par défaut
    Non, ton script ne fonctionne pas.
    les boucles n'itère sur aucun autre élément que celui indiqué : il n'y a aucun Développement de chemins !

    un fichier "ordinaire" n'est ni un répertoire, ni un lien, ni... autre chose qu'un fichier "régulier" (selon les termes de help test).

    de plus :
    il faut faire toutes les incrémentations et donc tous les tests (sauf ceux qui vérifient les arguments du script, bien sûr) dans une seule boucle.
    il faut compter les fichiers exécutables, qui font parties du nombre des fichiers portant une extension, et qui font eux-mêmes parties du nombre des fichiers ordinaires/réguliers. #inception

    il faudrait ajouter un prompt aux commandes read pour que l'utilisateur sache quelle information il doit entrer.

    je préfère la commande test aux crochets, que je trouve moche; ça a aussi le bénéfice de montrer que if utilise le retour de commandes, et que ce n'est pas une forme toute faite (if [...).

    et si le script ne reçoit qu'un seul argument, que se passe-t-il ?
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

Discussions similaires

  1. site de réservations<mon diagramme est il juste?>
    Par spring.time dans le forum Diagrammes de Classes
    Réponses: 1
    Dernier message: 09/05/2012, 17h21
  2. [MCD] Mon script est-il correct ?
    Par batchi dans le forum Schéma
    Réponses: 1
    Dernier message: 16/02/2011, 15h50
  3. Mon script est-il correcte ?
    Par neufrdb dans le forum Débuter avec Java
    Réponses: 6
    Dernier message: 01/02/2011, 11h13
  4. Mon script est "mal formé" & recherche de script
    Par Msieurduss dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 07/09/2010, 18h58
  5. Réponses: 3
    Dernier message: 23/02/2006, 08h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo