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 :

Projet en shell


Sujet :

Shell et commandes GNU

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 6
    Par défaut Projet en shell
    Bonjour/Bonsoir , voila j'ai un projet a faire pour lundi avec le language shell . Voici le sujet :



    Voici ce que j'ai fait :
    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/sh
    #Projet 19 : Shell Compressor 
    mkdir Fichier_Projet /home/
     
    echo "affichage de la liste"
    ls 
     
    echo $#
    if test -f
     
    then 
        cp * /home/Fichier_Projet/
        echo "c est bon !!! :D"
    else
        echo "ben ouai passon a la suite"
    fi
     
    echo $#
    if test -d
     
    then
      cp -R * /home/ili819/Fichier_Projet/
        echo "Parfait"
    else
        echo "-_-"
    fi
     
     
    ls *
     
    if test -f
     
    then cp * /home/Fichier_Projet/
     echo " C'est reussi"
    else
    echo " C'est mort"
    fi

    Donc voila ... je sais pas trop quoi faire mais je pense que la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ls *
     
    if test -f
     
    then cp * /home/Fichier_Projet/
     echo " C'est reussi"
    else
    echo " C'est mort"
    fi
    sert à rien ...

    Le problème c'est que je copie ( avec ce script ) les répertoires or je dois avoir QUE les fichiers ... donc j'ai regardé s'il y'avait des commandes pour extraire tous les fichiers de chaque répertoire puis par la suite supprimer ces répertoires mais la j'avou je suis perdu ..


    Merci par avance pour votre aide

    Je precise que j'ai un peu pres appris ce language aujourd'hui et que par malheur je suis tomber sur le projet en shell..

  2. #2
    Expert confirmé Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Par défaut
    on est pas la pour faire tes devoirs, on t'aidera mais après lundi
    en plus tu as un début de solution, continues à reflechir pour completer ce qui manque, et utiliser les bonnes methodes aux bons moments...

    tu vas trouver j'en suis sur...

    si ça peut t'aider fais le d'abord avec find et tu changera apres ça devrait te guider.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 651
    Par défaut
    Bonjour,

    Tu peux oublier ls¸cette commande, très pratique dans un terminal, est à proscrire dans un script, car elle génère des complications pour retrouver les noms de fichiers, et est donc source d'erreurs.
    Bref, dans un script, c'est du poison.

    Il y a déjà eu beaucoup de questions sur la façon de modifier le nom des fichiers, ici-même.
    Le principe est identique, toi, tu veux seulement les copier ailleurs...
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  4. #4
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Par défaut
    Bonjour.

    Comme dit N_Bah, c'est mieux d'éviter ls ...

    Tu peux partir sur cette piste (non testé) :

    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
    #!/bin/bash
     
    # Si pas d'arguments
    if [ $# -lt 1 ]
    then
        echo "Saisir le répertoire :"
        read REP
    else
        # On prend le premier argument
        REP=$1
    fi
     
    # On parcours le contenu de ce répertoire (en évitant le ls)
    for i in $REP/*
    do
        # ... à implémenter
    done
    Faut pas oublier la compression (avec gzip comme demandé), ni la gestion du répertoire de destination (de la même façon que le répertoire source) et enfin faut pas hésiter à se servir du man.

    Je te laisse implémenter la suite .

    Ensuite ici, tu trouvera des exercices corrigés ou certains éléments pourront te servir (comme les tests sur les fichiers ou ce genre de chose).

    Cordialement,
    Idriss

  5. #5
    Membre éprouvé Avatar de Levi59
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2011
    Messages : 58
    Par défaut
    Je suis absolument pas un pro du script mais comme ça sans trop réfléchir, je dirais qu'une fonction récursive (je pense à une fonction faisant appel à elle même. Je ne suis pas sûr que le terme soit bien employé...) et une boucle for...done pourrait régler ton problème de recherche récursive.

    À toi de voir si ma remarque te sera utile et bon courage pour ton boulot!

    edit : grilled pour la boucle for. je n'étais pas sûr que les chemins du type "/cheminvers/*" fonctionnaient en sh. Du coups l'idée de la fonction récursive n'est peut être pas nécessaire. À vérifier!

    Si tu as le droit au bash >=4, regarde du coté des options "shopt ...".

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 651
    Par défaut
    effectivement, pour descendre dans les sous-répertoires, il faudra une fonction récursive.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  7. #7
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Par défaut
    Citation Envoyé par Levi59 Voir le message
    edit : grilled pour la boucle for. je n'étais pas sûr que les chemins du type "/cheminvers/*" fonctionnaient en sh. Du coups l'idée de la fonction récursive n'est peut être pas nécessaire. À vérifier!
    Si si au contraire. Si on a seulement 1 niveau à descendre pas besoin mais sinon ce sera bien mieux de passer par une fonction récursive

    Je ne lui ai donné que les premières pistes.

    Cordialement,
    Idriss

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 6
    Par défaut
    Merci pour vos aides mais je cherche toujours :/

    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
    #!/bin/bash
     
    # Si pas d'arguments
     
    mkdir Fichier_Projet /home/
     
    if [ $# -lt 1 ]
    then
        echo "Saisir le répertoire :"
        read REP
    else
        # On prend le premier argument
        REP=$1
    fi
     
     echo $#
    if test -d
     
    then 
        cp -R /home/ili819/Fichier_Projet/
        echo "c est bon !!! :D"
    else
        echo "ben ouai passon a la suite"
    fi
     
    # On parcours le contenu de ce répertoire 
    for i in $REP/*
    do
        cp * /home/ili819/Fichier_Projet
    done

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 651
    Par défaut
    qu'est censé faire mkdir ?
    test nécessite un argument.

    tu devrais faire un plan de ce qui doit être fait pour réaliser la tâche assignée, dessiner un arbre de décision...
    i.e. ne pas coder directement sans savoir où tu vas aller.
    et lire la documentation :
    man commande_externe
    commande_externe --help
    man bash
    help commande_interne
    lire les documents en lien dans ma signature
    trouver un copie de l'Advanced Bash Scripting
    ...
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 6
    Par défaut
    mkdir permet de créer un répertoire..

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 651
    Par défaut
    je demandais ça dans le cadre de ton script, pas d'une manière générale.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 6
    Par défaut
    Bah dés que les fichiers étaients copiés alors il allait vers le repertoire créer

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 651
    Par défaut
    tel que tu l'as écrite, cette commande crée un répertoire Fichier_Projet dans le répertoire courant, et tente de recéer /home/.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  14. #14
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 6
    Par défaut
    Ah d'accord.

    Car en faite je veux parcourir tous les répertoires ( et sous repertoires ) et ils copient tous les fichiers qui les composent vers un nouveau fichier qui faudra compresser dans un même fichier.

    Faudrais peut etre utiliser la fonction while pour dire que tant qu'il y'a des sous repertoires alors il continue a parcourir

  15. #15
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 6
    Par défaut
    C'est bon je pense avoir résolu . Merci

  16. #16
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 832
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par TNT soldat Voir le message
    Car en faite je veux parcourir tous les répertoires ( et sous repertoires ) et ils copient tous les fichiers qui les composent vers un nouveau fichier qui faudra compresser dans un même fichier.
    Salut

    Je vois que tu as bien compris que sous Unix, tout était fichier. Toutefois pour nous, pauvres humains, ta phrase n'est pas super super claire.

    En plus tu dis que tous les fichiers des divers répertoires seront copiés dans un même fichier/dossier. Mais comment va se comporter ton script si tu as un fichier "repA/toto" et un autre "repB/toto" ? Le second "toto" qui sera copié dans ton dossier de destination écrasera le premier...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  17. #17
    Membre éprouvé Avatar de Levi59
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2011
    Messages : 58
    Par défaut
    Juste pour voir comment tu as résolu le problème, je pense qu'il serait intéressant de publier le résultat de ton travail (après lundi pour éviter de mâcher le travail d'un camarade) histoire de voir la solution apportée à cette exercice et peut être te conseiller pour la prochaine fois !

    Edit :
    gzip ne compresse pas des dossiers, J'en conclus que chaque fichier doit être compressé dans le dossier de destination non ?
    Je suis curieux de comprendre...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 17
    Dernier message: 01/07/2011, 11h21
  2. La commande shell pour exporter un projet en Jar
    Par Jounayd dans le forum Général Java
    Réponses: 1
    Dernier message: 27/11/2008, 14h49
  3. [Continuum] Ajouter un projet Shell
    Par eXiaNazaire dans le forum Intégration Continue
    Réponses: 1
    Dernier message: 23/06/2008, 17h10
  4. [Continuum] [1.1] Projet shell : environnement d'execution
    Par benaben dans le forum Intégration Continue
    Réponses: 2
    Dernier message: 26/03/2008, 14h14
  5. [Continuum] Ajouter un projet shell
    Par dferot dans le forum Intégration Continue
    Réponses: 4
    Dernier message: 14/12/2007, 10h07

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