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

Linux Discussion :

Boucle for en shell


Sujet :

Linux

  1. #1
    Candidat au Club
    Inscrit en
    Avril 2009
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Boucle for en shell
    Bonjour,

    Je suis en train de faire un script qui me permettra d'archiver un certain nombre de répertoire en tar.gz. Chacun des répertoires est un projet, les tar.gz doivent être au nom des projets.

    j'aimerai faire en shell une boucle for de ce type (je vous la fait en C/C++):
    for (i=0; i<a; i++)
    {
    }

    dans ma variable a, j'ai le nombre de répertoire projet se trouvant à l'endroit ou j'exécute mon script:
    a=`find -maxdepth 1 -type d | wc -l`

    Merci d'avance pour votre aide

  2. #2
    Inactif  
    Inscrit en
    Avril 2005
    Messages
    750
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 750
    Points : 498
    Points
    498
    Par défaut
    Salut, je ne suis pas un pro du shell script, mais comme je dois en faire pas mal sur mon projet actuel, je m'y suis mis, et donc je me permet de poster.
    Donc moi je ferai quelque chose dans ce style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for repertoire in `find . -maxdepth 1 -type d`
    do
      # traitement
    done

  3. #3
    Invité
    Invité(e)
    Par défaut
    Salut,


    Voici un exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    for rep in `find . -type d`; do tar -czvf "$rep".tar.gz "$rep"; done

  4. #4
    Candidat au Club
    Inscrit en
    Avril 2009
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Roh, super !!! En une ligne en plus je me compliquais bien la vie moi

    Merci bcp pour l'aide

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 387
    Points
    19 387
    Par défaut
    ou encore
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find . -maxdepth 1 -type d -exec tar -czvf {}.tar.gz {} \;
    ...
    ?
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  6. #6
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    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 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par david06600 Voir le message
    Salut, je ne suis pas un pro du shell script, mais comme je dois en faire pas mal sur mon projet actuel, je m'y suis mis, et donc je me permet de poster.
    Donc moi je ferai quelque chose dans ce style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for repertoire in `find . -maxdepth 1 -type d`
    do
      # traitement
    done
    D'une façon générale, c'est toujours maladroit de partir sur un "for var in `commande`" car si jamais la commande renvoie des éléments avec des espaces, chaque partie de l'élément sera traité par une itération différente (le for se cale sur l'espace pour séparer les choses).

    Il vaut mieux lui préférer la tournure suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    commande |while read var
    do
        # Traitement
    done
    Le read se calant sur le "\n", on est certain que toute la ligne, même si celle-ci contient un espace, sera traitée d'un bloc.
    Mais cette écriture possède un inconvénient majeur: si on instancie une variable dans la boucle (un compteur par exemple), elle est perdue en fin de boucle (le pipe tout entier incluant ladite variable s'étant déroulé dans un autre processus)
    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]

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

Discussions similaires

  1. afficher les paramètres d'un script shell avec une boucle for
    Par nakatami dans le forum Shell et commandes GNU
    Réponses: 7
    Dernier message: 15/03/2011, 19h21
  2. Boucle for en shell
    Par nielsou dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 12/12/2009, 11h34
  3. [SHELL] Variable dans boucle for
    Par magicwill dans le forum Linux
    Réponses: 6
    Dernier message: 11/08/2007, 11h31
  4. Commande shell boucle for
    Par boula dans le forum Shell et commandes GNU
    Réponses: 6
    Dernier message: 18/07/2007, 15h41
  5. Shell - Erreur dans une boucle for
    Par claralavraie dans le forum Linux
    Réponses: 4
    Dernier message: 11/01/2006, 13h45

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