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 et guillemets penchés


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    294
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 294
    Par défaut Boucle for et guillemets penchés
    Bonjour,

    J'aimerais savoir ce que veut dir le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    % /mnt/CF16/bin
    % for i in `cat /tmp/liste`
     do/bin/ln -s busybox $i;
    done`
    Merci d'avance.

  2. #2
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 412
    Par défaut
    Bonjour,

    Ligne 1: Bah, rien
    Ligne 2: execute la commande bin qui se trouve dans /mnt/CF16 (connait pas cette commande, désolé)
    Ligne 3,4,5: doit attendre une saisie clavier pour fermer le back-quote...

  3. #3
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 299
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 299
    Par défaut
    Bonjour

    +1 disedorgue.

    • ``est équivalent à $( )Il devrait remplacer l'expression par son résultat.
    • ln -s sert à faire des liens symboliques (comme des raccourcis sous windows)
    • Il y a un nombre impair de `
    • Mettre un ";" en fin de ligne est inutile puisque cela exprime la fin de ligne dans une commande shell

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 871
    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 871
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par xavierdestev Voir le message
    Bonjour,

    J'aimerais savoir ce que veut dir le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    % /mnt/CF16/bin
    % for i in `cat /tmp/liste`
     do/bin/ln -s busybox $i;
    done`
    Merci d'avance.
    Bonjour
    La syntaxe `commande Unix` (qui est pure Bourne Shell) est remplacée par ce que la commande affiche. Ce remplacement s'inscrit alors dans l'expression dans laquelle elle s'effectue.

    Exemple
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    cd /tmp
    rep=`pwd`      # Equivalent à rep=/tmp puisque la commande "pwd" affiche "/tmp"

    Cette syntaxe a été remplacée dans les shells évolués par $(commande Unix). D'une part elle est plus parlante, d'autre part elle permet plus facilement l'imbrication de commandes
    Exemple
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    fact()
    {
        test $1 -eq 0 && echo 1 || expr $1 \* $(fact $(expr $1 - 1))
    }
    Exemple qui serait plus difficile et moins lisible à écrire avec les backquotes classiques
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    fact()
    {
        test $1 -eq 0 && echo 1 || expr $1 \* `fact \`expr $1 - 1\``
    }

    Donc ton for in `cat /tmp/liste` va commencer par faire un cat /tmp/liste. Cette commande va afficher le contenu du fichier /tmp/liste (par exemple "toto titi tata") donc cet affichage sera repris ici et intégré dans l'expression ce qui donnera au final for i in toto titi tata.

    Accessoirement cette syntaxe est assez maladroite parce que si le contenu du fichier contient un élément avec espace, cet élément sera alors découpé en deux éléments par le for qui bien évidemment n'en traitera alors aucun (puisqu'aucune des deux parties ne correspondra à l'élément entier).
    On lui préfère largement la syntaxe suivante
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    cat /tmp/liste | while read i
    do
       ...
    done
    Le read se calant sur le <return> pour travailler, il ne sera pas gêné par un espace...

    PS: la backquote finale (après le done) ne veut rien dire et est probablement une erreur de recopie. Mettre une commande entre backquotes ne se justifie que:
    • si la commande affiche quelque chose
    • si ce qu'elle affiche doit être réutilisé dans le script
    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]

  5. #5
    Membre très actif
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    294
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 294
    Par défaut
    Merci beaucoup pour cette réponse très détaillée.

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

Discussions similaires

  1. Boucle for dans un script cmd
    Par nicolas.ganache dans le forum Développement
    Réponses: 4
    Dernier message: 19/07/2004, 17h07
  2. Réponses: 3
    Dernier message: 06/07/2004, 11h21
  3. [Debutant] Batch et Boucle for
    Par ludovic.fernandez dans le forum Scripts/Batch
    Réponses: 8
    Dernier message: 06/05/2004, 20h21
  4. [Swing][boucles] for, do, if .....comment faire simple?
    Par chastel dans le forum AWT/Swing
    Réponses: 7
    Dernier message: 02/05/2004, 23h49
  5. [langage] boucle "for" modification du pas
    Par K-ZimiR dans le forum Langage
    Réponses: 4
    Dernier message: 29/04/2004, 12h54

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