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 :

Variable et boucle while


Sujet :

Shell et commandes GNU

  1. #21
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 347
    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 347
    Par défaut
    En changeant d'écriture (donc sans les '|' génant, pour que la boucle reste au premier plan:
    (pas 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
    18
    19
    20
    21
    22
    23
    #! /bin/bash
     
    file=/bda-scripts/commandes.txt
    I=1
     
    MSG="Debut script\n"
     
    while true
    do
    read LIGNE
    set -- $LIGNE
    if [ "$LIGNE" = "" ]
    then
            MSG=$MSG"FIN\n"
            break
    fi
            MSG=$MSG"sauvegarde $I\n"
            MSG=$MSG"dossier $1\n"
            MSG=$MSG"sauvegarde $2.tar.gz\n"
            let I++
    done < <(tr -d '\015' <$file) 
     
    echo -e "$MSG"
    J'en ai profité pour retirer le 'cat' qui ne sert à rien...

  2. #22
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Par défaut
    On peut aussi garder le pipe et supprimer le sous shell et le true inutiles :
    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
    #!/bin/bash
    file=/bda-scripts/commandes.txt
    i=1
    shopt -s lastpipe
    msg="Debut script\n"
    tr -d '\015' < $file  | while read ligne
    do
      set -- $ligne
      msg=$msg"sauvegarde $i\n"
      msg=$msg"dossier $1\n"
      msg=$msg"sauvegarde $2.tar.gz\n"
      let i++
    done
    msg=$msg"FIN\n"
     
    echo -e "$msg"

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 288
    Par défaut
    Quel est l'intérêt de stocker les messages dans une variable ? Aucun.

    Bonus: tu peux même récupérer la sortie standard d'une commande comme for ou while.

    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $ for ((i=1;i<10;i++));do echo $i;done |sed -n '4,7p'
    4
    5
    6
    7
    C'est le fait de voir des \n partout qui provoque cette réaction.

  4. #24
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 347
    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 347
    Par défaut
    [MAUVAISE FOI]
    Je n'aime pas modifier les shopt...
    En fait, le while true peut-être utile dans le cas du potentiel retour à la ligne manquant dans la dernière ligne du fichier.
    Par contre, sa vérification est contraignante car elle oblige d'avoir un fichier sans ligne vide...
    [/MAUVAISE FOI]
    En fait, je ne me rappelle jamais quelles options faut modifier pour avoir le comportement désiré.
    Et pour une boucle read bien gérée, il suffit de rechercher dans le forum, une solution que jlliagre avait donnée.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Boucle while et if et tableau variable
    Par beninsky dans le forum Langage
    Réponses: 5
    Dernier message: 21/02/2009, 22h11
  2. Boucle While et les variables
    Par joboy84 dans le forum Langage
    Réponses: 5
    Dernier message: 05/06/2008, 13h16
  3. Problème avec variable dans boucle DO WHILE
    Par bandit_debutant dans le forum Langage
    Réponses: 13
    Dernier message: 25/02/2008, 16h34
  4. Portée d une variable (boucle while)
    Par racoboss dans le forum Langage
    Réponses: 4
    Dernier message: 11/12/2007, 09h37
  5. Affectation de variable boucle FOR à l'intérieur d'une boucle WHILE
    Par Droïde Système7 dans le forum Débuter
    Réponses: 10
    Dernier message: 05/11/2007, 19h11

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