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 :

Manipulation de dossiers et fichiers


Sujet :

Shell et commandes GNU

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2017
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2017
    Messages : 176
    Points : 99
    Points
    99
    Par défaut Manipulation de dossiers et fichiers
    Bonjour,
    Je débute en bash et j'aimerai arriver au résultat ci dessous.

    Nom : Capture.PNG
Affichages : 428
Taille : 16,0 Ko

    Voici ce que j'ai fais jusqu'à maintenant et je bloque sur la partie ventilation.

    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
     
    #! /bin/bash
     
    #fonction qui crée les dossiers et fichiers de départ
    createdirfile(){
       cd /home/fred/examen
       mkdir Resultats Etudiants Bulletins Backup Palmares
       cd /home/fred/examen/Resultats
       echo -e "Michel 10\nFred 8" >> math
       echo -e "Michel 20\nLuc 3\nPol 10\nFred 13" >> OS
       echo -e "Luc 9\nMichel 14\nFred 19" >> analyse
       echo -e "Luc 7\nMichel 18\nPol 4" >>DB
    }
     
    #fonction qui efface les dossiers et fichiers de départ
    deldirfile(){
       cd /home/fred/examen
       rm -r Resultats Etudiants Bulletins Backup Palmares
    }
     
    #fonction qui boucle le fichier Resultats et récupère tous les noms de fichier qu'il contient dans un tableau.
    recupfilename(){
       cd ../Resultats
       files=(*)
       cd ..
    }
     
    #fonction qui boucle sur tous les fichiers du dossier Resultats et qui récupère
    #les noms des Etudiants pour créer un fichier à leur noms dans le dossier Etudiants'
    createfileEtudiants(){
       cd /home/fred/examen/Etudiants
       #boucle tous les fichiers du répertoire Résultats
       for fic in `ls /home/fred/examen/Resultats/*`
       do
          #lis chaque ligne de chaque fichiers
          while read ligne;
          do
             #récupère le premier mot -f1(nom etudiant) et crée un fichier avec son nom dans le dossier courant (xargs touch)
             #xargs construit et exécute des lignes de commandes à partir de l'entrée standard.
             echo $ligne | cut -f1 -d" " | xargs touch;
          done < $fic
       done
    }
     
    #menu de départ
    echo "Entrez votre choix"
    select choix in "Ventilation" "Bulletin" "Palmares" "Consultation" "Creation Documents" "Effacer Documents" "Quitter"
    do
       case "$REPLY" in
          1) echo "Menu Ventilation"
               recupfilename files
               echo "${files[@]}"
               createfileEtudiants;;
          2) echo "Menu Bulletin";;
          3) echo "Menu palmares";;
          4) echo "menu Consultation";;
          5) echo "Menu Création Document"
             createdirfile;;
          6) echo "Menu Effacer"
             deldirfile;;
          7) echo "Quitter"; break;;
       esac
    done
    je veux en gros:
    lire ligne de mes fichiers cours avec les résultats.
    dans chaque fichier cours, lire deux mots (nom et cote)
    voir si premier mot (etudiant existe)
    sinon le créer
    ajouter le nom du cours et le note dans le fichier de l'étudiant.

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

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

    en général, on n'utilise pas cd dans un script : on stocke le chemin dans une variable, et on fait précéder tout ce qui doit être fait dans le répertoire par la variable.

    ON N'UTILISE PAS ls DANS UN SCRIPT !!!
    parce que c'est inutile : c'est le shell qui exécute le développement, et la substitution de commandes ne protège pas les noms de fichiers "exotiques".

    read permet d'assigner plusieurs variables (cf. Comment lire un fichier, donc, cut est inutile.

    en gros :
    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
    chemin=/chemin/versLesRépertoires
    autreChemin=/autre/chemin
    for d in "$chemin"/*/
    do
       for f  in "$d"/*
       do
          if test -f "$f"
          then
             matiR="${f##*/}"
             while read nom note
             do
                echo "$matiR $note" >> "$autreChemin/$nom"
             done <"$f" #la redirection permet de ne pas recourir à `cat'
          fi
       done
    done
    pas testé.
    il y a peut-être une boucle inutile.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2017
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2017
    Messages : 176
    Points : 99
    Points
    99
    Par défaut
    Merci pour les infos,
    POur le LS, j'en parlerai à mon prof

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 550
    Points : 19 383
    Points
    19 383
    Par défaut
    s'il in/persiste, adresse-le moi, je lui donnerai des cours.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2017
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2017
    Messages : 176
    Points : 99
    Points
    99
    Par défaut

  6. #6
    Expert confirmé
    Avatar de becket
    Profil pro
    Informaticien multitâches
    Inscrit en
    Février 2005
    Messages
    2 854
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informaticien multitâches
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 2 854
    Points : 5 915
    Points
    5 915
    Par défaut
    Pourquoi faire simple quand on peut faire compliquer ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     for fichier in Resultats/* 
     do   
    	awk '{ gsub(".*/","",FILENAME); print FILENAME ": " $2 >> "Etudiant/"$1 }' $fichier
     done

  7. #7
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2017
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2017
    Messages : 176
    Points : 99
    Points
    99
    Par défaut
    Tu sais m'expliquer ce que fait ce code?

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 550
    Points : 19 383
    Points
    19 383
    Par défaut
    Pourquoi faire simple quand on peut faire compliquer ?
    au moins, es-tu sûr que $fichier est un fichier, et qu'il n'a pas un nom "exotique" ?
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  9. #9
    Expert confirmé
    Avatar de becket
    Profil pro
    Informaticien multitâches
    Inscrit en
    Février 2005
    Messages
    2 854
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informaticien multitâches
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 2 854
    Points : 5 915
    Points
    5 915
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      cd /home/fred/examen
       mkdir Resultats Etudiants Bulletins Backup Palmares


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     Dir=/home/fred/examen
     ListeRep=( Resultats Etudiants Bulletins Backup Palmares )
     
    for Rep in ${ListeRep[@]} ; do mkdir $Dir/$Rep ; done

  10. #10
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2017
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2017
    Messages : 176
    Points : 99
    Points
    99
    Par défaut
    Citation Envoyé par becket Voir le message
    Pourquoi faire simple quand on peut faire compliquer ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     for fichier in Resultats/* 
     do   
    	awk '{ gsub(".*/","",FILENAME); print FILENAME ": " $2 >> "Etudiant/"$1 }' $fichier
     done
    Tu sais m'expliquer ce que fait ce code?

  11. #11
    Expert confirmé
    Avatar de becket
    Profil pro
    Informaticien multitâches
    Inscrit en
    Février 2005
    Messages
    2 854
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informaticien multitâches
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 2 854
    Points : 5 915
    Points
    5 915
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     for fichier in Resultats/* 
     // Pour chaque fichier dans le répertoire Résultat : 
     do   
            //gsub(".*/","",FILENAME) 
           // Modifier la variable qui contient le chemin complet du fichier sur lequel on est en train de travailler pour extraire le nom du fichier 
     
           // print FILENAME ": " $2 >> "Etudiant/"$1
           // Affiche Le nom du fichier et le résultat et envoie le tout vers le répertoire Etudiant/Premier Champs du fichier ( Le nom de l'étudiant ) 
    	awk '{ gsub(".*/","",FILENAME); print FILENAME ": " $2 >> "Etudiant/"$1 }' $fichier
     done

  12. #12
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2017
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2017
    Messages : 176
    Points : 99
    Points
    99
    Par défaut
    Merci, j'étudie ça et j'essaie.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 550
    Points : 19 383
    Points
    19 383
    Par défaut
    // Pour chaque fichier dans le répertoire Résultat :
    en fait, pour chaque élément présent sous le répertoire, que ce soit un fichier, un répertoire, un lien...
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  14. #14
    Expert confirmé
    Avatar de becket
    Profil pro
    Informaticien multitâches
    Inscrit en
    Février 2005
    Messages
    2 854
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informaticien multitâches
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 2 854
    Points : 5 915
    Points
    5 915
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    en fait, pour chaque élément présent sous le répertoire, que ce soit un fichier, un répertoire, un lien...

    Lorsque l'on crée le répertoire et son contenu à l’intérieur du script, il n'est pas vraiment utile de le re-vérifier à mon avis.

    Mais on peut ajouter un petit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     [ -f "$fichier" ] &&
    Avant de faire notre awk.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 550
    Points : 19 383
    Points
    19 383
    Par défaut
    quand on s'adresse à un débutant, il n'est pas inutile de souligner quelques pratiques élémentaires qui évitent bien des tracas ultérieurs;
    tel que, toujours* entourer les développements de variables de guillemets -> "$fichier".

    --
    * à moins de savoir pourquoi.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  16. #16
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2017
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2017
    Messages : 176
    Points : 99
    Points
    99
    Par défaut
    J'ai essayé les deux solutions, pas d'erreur, mais ça ne crée pas les fichiers dans mon répertoire Etudiants.

    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
    43
    44
    45
     
    #menu de départ
    echo "Entrez votre choix"
    select choix in "Ventilation" "Bulletin" "Palmares" "Consultation" "Creation Documents" "Effacer Documents" "Quitter"
    do
       case "$REPLY" in
          1) echo "Menu Ventilation"
               #recupfilename files
               #echo "${files[@]}"
               #createfileEtudiants
               #moveandrenamefile
               cheminResultats=/home/fred/examen/Resultats
               cheminEtudiants=/home/fred/examen/Etudiants
               for d in "$cheminResultats"/*
               do
                  for f in "$d"/*
                  do
                     if test -f "$f"
                     then
                        matiere="${f##*/}"
                        while read nom note
                        do
                           echo "$matiere $note" >> "$cheminEtudiants/$nom"
                        done
                     fi
                  done
               done;;
               #for fichier in /home/fred/examen/Resultats/* 
               #do   
            #awk '{ gsub(".*/","",FILENAME); print FILENAME ": " $2 >> "Etudiant/"$1 }' $fichier
               #done;;
               #do line="$champ1 $champ2"
                  #echo "$line"
               #done < /home/fred/examen/Resultats*;;
          2) echo "Menu Bulletin";;
          3) echo "Menu palmares";;
          4) echo "menu Consultation";;
          5) echo "Menu Création Document"
             createdirfile;;
          6) echo "Menu Effacer"
             deldirfile;;
          7) echo "Quitter"; break;;
          *) echo "erreur de choix";;
       esac
    done

  17. #17
    Expert confirmé
    Avatar de becket
    Profil pro
    Informaticien multitâches
    Inscrit en
    Février 2005
    Messages
    2 854
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informaticien multitâches
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 2 854
    Points : 5 915
    Points
    5 915
    Par défaut
    Si tu n'as pas la fonction, ni les répertoires, c'est assez logique ...

  18. #18
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2017
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2017
    Messages : 176
    Points : 99
    Points
    99
    Par défaut
    J'ai fais comme ceci.

    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
     
    #! /bin/bash
     
    #Script examen Nicolay F. 2ème Bac Info
     
    #fonction qui crée les dossiers et fichiers de départ
    createdirfile(){
       cheminexamen=/home/fred/examen
       cheminresultats=/home/fred/examen/Resultats
       cd "$cheminexamen"
       mkdir Resultats Etudiants Bulletins Backup Palmares
       cd "$cheminresultats"
       echo -e "Michel 10\nFred 8" >> math
       echo -e "Michel 20\nLuc 3\nPol 10\nFred 13" >> OS
       echo -e "Luc 9\nMichel 14\nFred 19" >> analyse
       echo -e "Luc 7\nMichel 18\nPol 4" >> DB
    }
     
    #fonction qui efface les dossiers et fichiers de départ
    deldirfile(){
       cheminexamen=/home/fred/examen
       cd "$cheminexamen"
       rm -r Resultats Etudiants Bulletins Backup Palmares
    }
     
    #fonction qui boucle le fichier Resultats et récupère tous les noms de fichier qu'il contient dans un tableau.
    recupfilename(){
       cd ../Resultats
       files=(*)
       cd ..
    }
     
    #fonction qui boucle sur tous les fichiers du dossier Resultats et qui récupère
    #les noms des Etudiants pour créer un fichier à leur noms dans le dossier Etudiants.
    createfileEtudiants(){
       cd /home/fred/examen/Etudiants
       #boucle tous les fichiers du répertoire Résultats 
       for fic in `ls /home/fred/examen/Resultats/*`
       do
          #lis chaque ligne de chaque fichiers
          while read ligne;
          do
             #récupère le premier mot -f1(nom etudiant) et crée un fichier avec son nom dans le dossier courant (xargs touch)
             #xargs construit et exécute des lignes de commandes à partir de l'entrée standard.
             echo $ligne | cut -f1 -d" " | xargs touch
          done < $fic
       done
    }
     
    #fonction qui ventile les points de toutes les matière de chaque etudiants dans un fichier à leur noms dans le répertoire /Etudiants
    ventilation(){
       cheminResultats=/home/fred/examen/Resultats
       cheminEtudiants=/home/fred/examen/Etudiants
       for dir in "$cheminResultats"/*
       do
          for file in "$dir"
          do
             if [ -f "$file" ]; then
                #ne récupère que le nom de toutes les matières
                matieres="${file##*/}"
                cat $matieres | while read mot1 mot2
                do
                   ligne="$matieres $mot2"
                   cd /home/fred/examen/Etudiants
                   if [ ! -e "$mot1" ]; then
                      echo -e "$ligne" >> "$mot1"
                   else
                      echo -e "$ligne" >> "$mot1"
                   fi
                done
             fi
          done
       done
    }
     
    #fonction qui déplace et renomme les fichiers de /Resultats vers /Backup et ajoute une date.
    moveandrenamefile(){
       cheminresultats=/home/fred/examen/Resultats
       cheminbackup=/home/fred/examen/Backup
       cd "$cheminresultats"
       mv * "$cheminbackup"
       cd "$cheminbackup"
       for file in $(ls)
       do
          mv "$file" BU"$file`date +%d%m%y`"
       done
    }
     
    #fonction bulletin, copie les fichiers etudiants puis calcul les totaux des cours affiché et de tous les cours
    calculbulletin(){
       cheminetudiants=/home/fred/examen/Etudiants
       cheminbulletins=/home/fred/examen/Bulletins
       cheminbackup=/home/fred/examen/Backup
       #cd "$cheminbackup"
       #nbcours= ls  "$cheminbackup" | wc -l
       cd "$cheminetudiants"
       cp * "$cheminbulletins"
       cd "$cheminbulletins"
       #echo "$nbcours"
       for file in $(ls)
       do
          #echo "$file"
          cat "$file" | while read nom point
          do
             points= "$points" + "$point"
             echo "$points"
          done
       done
    }
     
    #menu de départ
    echo "Entrez votre choix"
    select choix in "Ventilation" "Bulletin" "Palmares" "Consultation" "Creation Documents" "Effacer Documents" "Quitter"
    do
       case "$REPLY" in
          1) echo "Menu Ventilation"
               cd /home/fred/examen/Resultats
               #recupfilename files
               #echo "${files[@]}"
               #createfileEtudiants
               ventilation
               moveandrenamefile;;
          2) echo "Menu Bulletin"
               calculbulletin;;
          3) echo "Menu palmares";;
          4) echo "menu Consultation";;
          5) echo "Menu Création Document"
             createdirfile;;
          6) echo "Menu Effacer"
             deldirfile;;
          7) echo "Quitter"; break;;
          *) echo "erreur de choix";;
       esac
    done
    par contre maintenant que j'ai bien le bulletin de chaque étudiant (dans /Bulletins/fichierbulletin), j'ai vraiment du mal à rentrer dans chaque bulletin pour pouvoir calculer la moyenne.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 550
    Points : 19 383
    Points
    19 383
    Par défaut
    oops, il manque une commande dans le code que j'ai donné :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while read var1 var2; do comm1; comm2; done < "$f"
    je corrige mon message.

    il faut aussi ne pas utiliser cat dans un script; la plupart du temps, c'est un UUOC.

    ensuite, for file in "$dir"/*, sinon pas de développement des chemins
    j'ai dit, pas de cd !
    après, ce n'est plus "$matiere", mais "$fichier" qu'il faut utiliser, dans une redirection, pas avec cat !
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  20. #20
    Expert confirmé
    Avatar de becket
    Profil pro
    Informaticien multitâches
    Inscrit en
    Février 2005
    Messages
    2 854
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informaticien multitâches
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 2 854
    Points : 5 915
    Points
    5 915
    Par défaut
    Citation Envoyé par Cisman Voir le message

    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
    #! /bin/bash
     
    #Script examen Nicolay F. 2ème Bac Info
     
    #fonction qui crée les dossiers et fichiers de départ
    createdirfile(){
       cheminexamen=/home/fred/examen
       cheminresultats=/home/fred/examen/Resultats
       cd "$cheminexamen"
       mkdir Resultats Etudiants Bulletins Backup Palmares
       cd "$cheminresultats"
       echo -e "Michel 10\nFred 8" >> math
       echo -e "Michel 20\nLuc 3\nPol 10\nFred 13" >> OS
       echo -e "Luc 9\nMichel 14\nFred 19" >> analyse
       echo -e "Luc 7\nMichel 18\nPol 4" >> DB
    }

    1 - Puisque tu vas utiliser /home/fred en permanence autant créer une variable et la réutiliser, ce sera plus clair
    2 - cd dans un script ?
    3 - >> ? Non !. Tu dois utiliser > à la place

    Citation Envoyé par Cisman Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #fonction qui efface les dossiers et fichiers de départ
    deldirfile(){
       cheminexamen=/home/fred/examen
       cd "$cheminexamen"
       rm -r Resultats Etudiants Bulletins Backup Palmares
    }
     
     
    #fonction qui boucle le fichier Resultats et récupère tous les noms de fichier qu'il contient dans un tableau.
    recupfilename(){
       cd ../Resultats
       files=(*)
       cd ..
    }
    cd ... encore ! Bof !

    Citation Envoyé par Cisman Voir le message
    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
    #fonction qui boucle sur tous les fichiers du dossier Resultats et qui récupère
    #les noms des Etudiants pour créer un fichier à leur noms dans le dossier Etudiants.
    createfileEtudiants(){
       cd /home/fred/examen/Etudiants
       #boucle tous les fichiers du répertoire Résultats 
       for fic in `ls /home/fred/examen/Resultats/*`
       do
          #lis chaque ligne de chaque fichiers
          while read ligne;
          do
             #récupère le premier mot -f1(nom etudiant) et crée un fichier avec son nom dans le dossier courant (xargs touch)
             #xargs construit et exécute des lignes de commandes à partir de l'entrée standard.
             echo $ligne | cut -f1 -d" " | xargs touch
          done < $fic
       done
    }
    1 - for fic in `ls /home/fred/examen/Resultats/*` Non !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for fic in `/home/fred/examen/Resultats/*`
    2 - echo $ligne | cut -f1 -d" "

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Quel est le meilleur langage pour manipuler des dossiers et des fichiers ?
    Par gstratege dans le forum Langages de programmation
    Réponses: 1
    Dernier message: 13/10/2015, 10h08
  2. [VBA-A]Parcours d'une arborescence dossiers et fichiers
    Par sidneyvba dans le forum VBA Access
    Réponses: 2
    Dernier message: 20/03/2006, 16h58
  3. dossier ou fichier?
    Par Biosox dans le forum C++
    Réponses: 2
    Dernier message: 06/10/2005, 14h41
  4. Peut on manipuler le système de fichier par T-SQL?
    Par WOLO Laurent dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 22/12/2003, 09h19
  5. Dossier ou Fichier avec ShellListView
    Par MoussDiouf dans le forum Langage
    Réponses: 6
    Dernier message: 14/06/2003, 12h33

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