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 :

Boucle for en shell


Sujet :

Shell et commandes GNU

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 20
    Points : 14
    Points
    14
    Par défaut Boucle for en shell
    Bonjour, je débute en shell et je souhaite faire un petit script qui permet à partir d'un dossier contenant des images de créer une page web avec une gallerie d'image. Et j'ai un problème avec ma boucle for sur le nombre d'images :

    Citation Envoyé par SHELL
    #! /bin/bash

    cd ~/Unix/Images

    for image in *.jpg; do
    convert -resize 200x150 "$image" ~/Unix/Miniatures/"$image"
    done

    for x in $(ls | wc -l); do
    touch $x.html
    done
    Je voudrais que la shell me créé autant de fichiers html que j'ai d'image. Comment faire ? J'ai bien essayer le 1:$(ls | wc -l) mais ca me créé seulement le fichier 1:3.html.

    Merci

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 20
    Points : 14
    Points
    14
    Par défaut J'ai trouvé !!
    for x in `seq 1 $(ls | wc -l)`; do
    touch $x.html
    done
    Voilà a force de chercher j'ai finis par trouver.
    Merci !

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 20
    Points : 14
    Points
    14
    Par défaut nouveau problème
    Bonjour,

    mes problèmes du jour :
    Citation Envoyé par .sh
    for Image in *.jpg; do
    touch $Image.html (ici je ne veux pas créer un fichier image.jpg.html mais juste image.html)
    echo $Image+1 >> $Image.html (je veux qu'ici il écrive ImageD'Apres.jpg dans le fichier html)
    done

  4. #4
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 731
    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 731
    Points : 31 054
    Points
    31 054
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par nielsou Voir le message
    Bonjour,

    mes problèmes du jour :
    Vas-y, passe ta commande. On est là pour ça.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 49
    Points : 53
    Points
    53
    Par défaut
    regarde le man bash, chapitre "Parameter Expansion"

    par exemple
    $ export IMAGE=test.jpg
    $ echo $IMAGE " " ${IMAGE%.jpg}
    test.jpg test

    ${IMAGE%.jpg} permet d'avoir le nom sans l'extension du fichier

  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 731
    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 731
    Points : 31 054
    Points
    31 054
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par nielsou Voir le message
    Voilà a force de chercher j'ai finis par trouver.
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for x in `seq 1 $(ls | wc -l)`; do
        touch $x.html
    done
    Merci !
    Dommage de mixer 2 syntaxes ayant certes le même but mais ne faisant pas partie des mêmes shells...
    La syntaxe `commande` provient du Bourne shell de base. Elle fonctionne mais a été ensuite rajouté en bash la syntaxe $(commande) faisant la même chose mais plus lisiblement.

    De plus la syntaxe $(commande) permet plusieurs niveaux d'implication $(commande1 ($commande2)), ce qui est faisable aussi avec la première syntaxe mais en utilisant des backslashes `commande1 \`commande2\``

    Donc comme je le dis, dommage de faire des mélanges de syntaxes...
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for x in $(seq 1 $(ls | wc -l)); do
        touch $x.html
    done

    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for x in `seq 1 \`ls | wc -l\``; do
        touch $x.html
    done

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 Neenux dans le forum Linux
    Réponses: 5
    Dernier message: 28/04/2009, 15h20
  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