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 :

problème boucle shell


Sujet :

Linux

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Décembre 2006
    Messages
    243
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 243
    Par défaut problème boucle shell
    Bonjour,

    J'execute ce script pour nettoyer des fichiers. Tout ce passe bien et au bout d'un moment il boucle avec $sortie=non
    Le fichier traité n'a pas de différence particulière.

    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
    24
    25
    26
    27
    28
    for file in */*/*; do
    case $file in
    *Network_I*)
     
    sortie=non														#initialisation
    egrep "^(Physical Address|DHCP Enabled|DHCP Server|IP Address)" $file > $file.1.txt		#je récupère ce qui m'intéresse
     
    while [ "$sortie" = non ]
    do
     
    ligne=$(head -n 1 $file.1.txt)										#pour tester la première ligne du fichier
    echo $ligne
     
    if [[ "$ligne" == Phy* ]]											#Physical Address
    then
    	sortie=oui
    	echo $sortie
    else
    	sed 1d $file.1.txt > $file.2.txt
    	cp $file.2.txt $file.1.txt
    	rm */*/*2*
    	echo $sortie
    fi
     
    done
    ;;
    esac
    done
    Merci d'avance pour votre aide.

  2. #2
    Expert confirmé Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Par défaut
    c'est qui le probleme exactement ?

  3. #3
    Membre émérite Avatar de BlaireauOne
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    492
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2007
    Messages : 492
    Par défaut
    Un test d'égalité avec cette syntaxe ne fonctionne pas :

    if [[ "$ligne" == Phy* ]]


    2 possibilités de remplacement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if [[ `echo $ligne | grep -c Phy` -eq 1 ]] 
        then
            echo "ok"
    fi


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    shopt -s extglob    # si shell bash
    if [[ "$ligne" == @(Phy*) ]] 
    	then
    	echo "ok"
    fi

    http://man.developpez.com/man1/bash.1.php
    .../...
    Si l'option extglob du shell option est activée par la commande shopt plusieurs opérateurs de correspondance étendue sont reconnus.
    Dans la description suivante, une liste-motif est une liste d'un ou plusieurs motifs séparés par des |.
    Les motifs composés sont formés en utilisant un ou plusieurs sous-motifs comme suit :

    ?(liste-motif)
    Correspond à zéro ou une occurrence des motifs indiqués
    *(liste-motif)
    Correspond à zéro ou plusieurs occurrences des motifs indiqués
    +(liste-motif)
    Correspond à une ou plusieurs occurrences des motifs indiqués
    @(liste-motif)
    Correspond à une occurrence exactement des motifs indiqués
    !(liste-motif)
    Correspond à tout sauf les motifs indiqués
    .../...

  4. #4
    Membre éclairé
    Inscrit en
    Décembre 2006
    Messages
    243
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 243
    Par défaut
    Bonjour,

    J'ai testé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if [[ `echo $ligne | grep -c Phy` -eq 1 ]]
    Mais le problème est le même.
    Un test d'égalité avec cette syntaxe ne fonctionne pas :

    if [[ "$ligne" == Phy* ]]
    Il semble que si.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    shopt -s extglob    # si shell bash
    euh...
    Mais le problème est le même avec ta deuxième proposition Blaireau One.

    c'est quoi le probleme exactement ?
    Le script s'execute il traite correctement environ la moitié des fichiers puis boucle.

    Merci pour vos réponses.

    Je soupsonne une erreur à la noix, mais elle se cache...

  5. #5
    Membre éclairé
    Inscrit en
    Décembre 2006
    Messages
    243
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 243
    Par défaut
    Un des fichiers n'était pas comme les autres....
    Le script supprime ligne après ligne et ne rencontre jamais : Phy*

    pfff

  6. #6
    Membre émérite Avatar de BlaireauOne
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    492
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2007
    Messages : 492
    Par défaut
    Citation Envoyé par jonathan1
    Un des fichiers n'était pas comme les autres....
    Le script supprime ligne après ligne et ne rencontre jamais : Phy*

    pfff
    Effectivement, c'est ce que je viens de voir.
    Pour prendre en compte ce cas de figure, modifie ton while comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    while [[ "$sortie" = non  && -s $file.1.txt ]]
    -s signifie que le fichier à une Size (taille ), donc pas vide

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

Discussions similaires

  1. Problème dans une boucle shell
    Par Maillon dans le forum Linux
    Réponses: 6
    Dernier message: 21/07/2009, 08h45
  2. problème boucle if en shell
    Par sajodia dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 04/06/2008, 15h37
  3. Problème boucle while et evenement
    Par tse_tilky_moje_imja dans le forum Général Python
    Réponses: 2
    Dernier message: 30/03/2006, 18h11
  4. [FLASH 8] Problème Boucle For
    Par Begood dans le forum Flash
    Réponses: 6
    Dernier message: 21/03/2006, 11h36
  5. []Problème de SHELL
    Par laurentfrancis dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 08/10/2005, 19h41

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