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 :

Interprétation d'un script, boucle FOR


Sujet :

Linux

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 22
    Points : 11
    Points
    11
    Par défaut Interprétation d'un script, boucle FOR
    bonsoir tous le monde ;

    j'ai un script , et je cherche quelqu'un qui puisse m'aider à interpréter chaque ligne du script à partir du for ( il n'est pas trop long !) afin de bien comprendre le fonctionnement du shell cad comment il interprète chaque ligne de commande. ( j'ai un peu de mal avec les scripts )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #!/bin/zsh
    cd $1
    cpt=0
    for i in $(find "." -name "*" -print)
    do
    if [[ ! -s $i ]]
    then
    echo fichier $i vide !
    rm -i $i
    cpt=$(($cpt + 1))
    fi
    done
    echo $cpt fichiers effacés.
    merci
    cordialement

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 896
    Points : 219 548
    Points
    219 548
    Billets dans le blog
    125
    Par défaut
    Bonjour,

    Si j'ai bien compris le script ( ce qui est assez rare )
    À partir du for
    Sachant que le for fais une itération dans les résultat renvoyé par la commande
    Cette commande affiche le nom de tous les fichiers dans le dossier courant.
    le if verifie si le fichier est vide
    alors on dit qu'il est vide (affichage d'une ligne, avec le nom du fichier par le echo )
    on le supprime ( rm )
    on incrémente un compteur
    on boucle
    et on affiche le compteur ( nombre de fichier supprimer )

    voilà pour l'algo.
    Mais je viens de me rendre compte que je fais peut être un hors sujet, et que tu connaissais ce que faisait le script mais que tu voulais plus savoir l'interpretation des lignes ( j'imagine le coup des variable )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for i in $(find "." -name "*" -print)
    en faisant $(find "." -name "*" -print) on demande d'analyser la commande afin de mettre son résultat dans i. ( et non la commande en elle même )
    pour acceder on resultat on fait $i ( comme dans le rm )
    à peu près la même chose. On rempli cpt par le resultat de la valeur contenu dans cpt + 1
    les doubles parenthèses sont importantes

    et dans le echo $cpt pour acceder à la valeur contenu dans cpt.

    Voilà

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 22
    Points : 11
    Points
    11
    Par défaut
    Bonjour tous le monde ;

    j'ai le script suivant et une ligne me pose problème , j'arrive pas à saisir son sens !!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #!/bin/zsh
    cpt=0
    cd $1
    for i in $(ls)  -> celle ci
    do
    ...
    ...
    merci
    cdt

  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 721
    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 721
    Points : 31 044
    Points
    31 044
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par omécéLinux Voir le message
    Bonjour tous le monde ;

    j'ai le script suivant et une ligne me pose problème , j'arrive pas à saisir son sens !!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #!/bin/zsh
    cpt=0
    cd $1
    for i in $(ls)  -> celle ci
    do
    ...
    ...
    merci
    cdt
    Il s'agit d'une façon plus récente de faire de la substitution de commande.
    En Bourne Shell pur, cela s'écrirait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #!/bin/sh
    cpt=0
    cd $1
    for i in `ls`
    do
    ...
    ...

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 22
    Points : 11
    Points
    11
    Par défaut
    ok je me lance corrigez moi en cas d'erreurs

    la ligne signifie :

    on affecte au paramètre i le résultat de la commande ls ( c.à.d tous les sous répertoires du répertoire $1 ) est ce que je me trompe ???

    merci
    cdt

  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 721
    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 721
    Points : 31 044
    Points
    31 044
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par omécéLinux Voir le message
    ok je me lance corrigez moi en cas d'erreurs

    la ligne signifie :

    on affecte au paramètre i le résultat de la commande ls
    Ouaip.

    En fait, le shell remplace la chaine `commande` par l'exact contenu de ce qu'affiche la commande.

    Très exactement, cela se passe de cette façon
    1) le shell met ce script en attente et démarre un sous-processus
    2) le sous-processus exécute la commande "ls"
    3) cette commande lancée naturellement affiche son listing à l'écran
    4) le shell récupère ce listing et le replace à l'endroit où était la commande. Et cet endroit était une boucle avec affectation de "i" sur la suite de mots donc...

    Citation Envoyé par omécéLinux Voir le message
    ( c.à.d tous les sous répertoires du répertoire $1 )
    Petit lapsus: ls affiche tout le contenu (tous les fichiers présents) et non les sous-répertoires

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 22
    Points : 11
    Points
    11
    Par défaut
    Merci Sve@r

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

Discussions similaires

  1. [Batch] script Boucle For ne fonctionne pas
    Par Tikiwi64 dans le forum Scripts/Batch
    Réponses: 5
    Dernier message: 25/06/2014, 16h23
  2. Réponses: 2
    Dernier message: 02/10/2008, 09h35
  3. Boucle FOR qui arrete le script
    Par yves_fuji dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 16/04/2008, 14h06
  4. script avec boucle for
    Par gloglo dans le forum Langage SQL
    Réponses: 16
    Dernier message: 30/05/2007, 14h30
  5. Boucle for dans un script cmd
    Par nicolas.ganache dans le forum Développement
    Réponses: 4
    Dernier message: 19/07/2004, 16h07

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