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 :

Boucle if en shell


Sujet :

Linux

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 7
    Points : 6
    Points
    6
    Par défaut Boucle if en shell
    Voila mon problème :

    printf "ENTRER LA DATE DE DEBUT (ex : 31/12/2008) :\n"
    read ddebut

    jdebut=`echo "$ddebut" | cut -c 1-2`
    mdebut=`echo "$ddebut" | cut -c 4-5`
    adebut=`echo "$ddebut" | cut -c 7-10`


    printf "\nVous demandez de recuperer les mails de l'utilisateur "$muser" à partir du "$ddebut" "\nEst-ce correct ?(o/n)\n"
    read reponse

    if test "$reponse" = n; then
    RETOUR
    else
    #Liste les noms des fichiers ainsi que leur dates du repertoire "/home/user/mail/" et les copie dans report
    ls -l /home/ronan/Bureau/*.* | awk '{print $6" "$8}' > /home/ronan/Bureau/report

    #Boucle qui parcours le fichier "report" et affiche la date re-arranger de chaque ligne du fichier
    while read line
    do
    annee=`echo "$line" | cut -c 1-4`
    mois=`echo "$line" | cut -c 6-7`
    jour=`echo "$line" | cut -c 9-10`
    mail=`echo "$line" | cut -c 12-`


    if test [$annee -ge $adebut] && [$annee -ge $adebut] && [$annee -ge $adebut]; then
    echo $annee">="$adebut
    fi

    done < report
    fi
    }

    Ma boucle if ne fonctionne pas
    ca me dit qu'il attend un integer alors que mes variables sont toutes des integer.
    j'ai essayer avec la syntaxe [$annee >= $adebut] et ["$annee" >= "$adebut"] mais c'est le même problème.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if test "$reponse" = n; then
    RETOUR
    else
    Retour correspond à quoi?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if test [$annee -ge $adebut] && [$annee -ge $adebut] && [$annee -ge $adebut]; then
    echo $annee">="$adebut
    fi
    Il faut utiliser soit les crochets soit test mais pas les deux en même temps

    De plus il faut des espaces entre le contenu de ton test et les []

    Exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    [ $annee -ge $adebut ] et pas [$annee -ge $adebut]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    [$annee -ge $adebut] && [$annee -ge $adebut] && [$annee -ge $adebut];
    Pourquoi mets-tu trois fois la même condition?

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    RETOUR est une fonction de controle

    les trois même conditions c'était juste un exemple

    mais j'ai essayer ce que tu m'as dit et tout fonctionne

    Merci Beaucoup

  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 RonnCmoi Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    			ls -l /home/ronan/Bureau/*.* | awk '{print $6" "$8}'  > /home/ronan/Bureau/report
     
    			#Boucle qui parcours le fichier "report" et affiche la date re-arranger de chaque ligne du fichier
    			while read line
    			   	do  
    ...
    				done < report
    Attention aux collisions => que se passera-t-il pour le fichier "report" si tu lances 2 fois ton script en parallèle
    Quand on crée un fichier temporaire, on s'arrange pour que son nom soit unique (par exemple en y faisant apparaitre la variable "$$"). Accessoirement il existe un dossier /tmp servant justement à y accueillir ce genre de fichier (et depuis quelques années on a vu apparaitre aussi $HOME/tmp ce qui évite d'aller polluer la partition "/" souvent assez petite)

    Cependant, ici ce n'est pas utile
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     ls -l /home/ronan/Bureau/*.* | awk '{print $6" "$8}'  | while read line
    do  
    	... traitement de $line ...
    done
    Citation Envoyé par RonnCmoi Voir le message
    Ma boucle if ne fonctionne pas
    Boucle if pfff....

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

Discussions similaires

  1. vecteur et boucle dans un shell
    Par Fatehcz dans le forum Langages de programmation
    Réponses: 3
    Dernier message: 22/06/2015, 13h35
  2. Boucle fork pour shell unix
    Par Bifurkk dans le forum C
    Réponses: 3
    Dernier message: 20/04/2012, 07h22
  3. Boucle for en shell
    Par nielsou dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 12/12/2009, 11h34
  4. Boucle for en shell
    Par Neenux dans le forum Linux
    Réponses: 5
    Dernier message: 28/04/2009, 15h20
  5. problème boucle if en shell
    Par sajodia dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 04/06/2008, 15h37

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