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 :

Problème Script SHell


Sujet :

Shell et commandes GNU

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 221
    Points : 108
    Points
    108
    Par défaut Problème Script SHell
    Bonjour

    J'ai un problème avec un petit script. En effet mon script se connecte à un répertoire, recherche un certain nombre de fichier et compte les lignes dans les fichiers trouvés.
    Code sh : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    n=`find /home/sasalim/TKA -type f -name "*.log_20111007" |wc -l`
    i=1
    while [ $n -ge $i ]
    do
      #echo "i="$i
      #echo `find -type f |ls -al`
      echo "Nombre de lignes du fichier fich$i.log_2011100 : "  `cat fich$i.log_20111007 |wc -l`
            nb$i=`cat fich$i.log_20111007 |wc -l`
      echo "nb$1=" $nb$i
      i=`expr $i + 1`
    done

    Le résultat retourné est le suivant:

    Code sh : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Nombre de lignes du fichier fich1.log_2011100 :  2616
    use4.sh[36]: nb1=:  not found.
    nb= 1
    Nombre de lignes du fichier fich2.log_2011100 :  1829
    use4.sh[36]: nb2=:  not found.
    nb= 2
    Nombre de lignes du fichier fich3.log_2011100 :  4442
    use4.sh[36]: nb3=:  not found.
    nb= 3
    Nombre de lignes du fichier fich4.log_2011100 :  4442
    use4.sh[36]: nb4=:  not found.
    nb= 4
    Donc il a trouvé 4 fichiers remplissant la condition fich1.log_20111007, fich2.log_20111007, fich3.log_20111007 et fich4.log_20111007 et pour chacun des fichiers il a calculé le nombre de ligne sauf pour le fichier fich4.log_20111007. Alors pourquoi n'arrive t'il pas à interpréter nb$i=`cat fich$i.log_20111007 |wc -l` pour m'afficher les bonnes valeurs de nb$i?

    Merci d'avance.

  2. #2
    Membre habitué Avatar de Levi59
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2011
    Messages : 58
    Points : 148
    Points
    148
    Par défaut
    Citation Envoyé par foxrol Voir le message
    Bonjour

    J'ai un problème avec un petit script. En effet mon script se connecte à un répertoire, recherche un certain nombre de fichier et compte les lignes dans les fichiers trouvés.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    n=`find /home/sasalim/TKA -type f -name "*.log_20111007" |wc -l`
    i=1 
    while [ $n -ge $i ] 
    do   
        #echo "i="$i   
        #echo `find -type f |ls -al`   
        echo "Nombre de lignes du fichier fich$i.log_2011100 : "  `cat fich$i.log_20111007 |wc -l`         
        nb$i=`cat fich$i.log_20111007 |wc -l`   
        echo "nb$1=" $nb$i 
          i=`expr $i + 1` 
    done
    Pour définir de nouvelles variables à partir d'autres variables à la volée dans un script, il faut utiliser "eval" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    eval Var$i=$(ta commande)
    Carpe Diem

  3. #3
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Points : 2 505
    Points
    2 505
    Par défaut
    Remarque bien que dans ce cas tu n'as pas besoin de créer une variable "nb1", "nb2"... différente à chaque tour de boucle. Tu peux te contenter d'avoir une seule variable "nb" et la réutiliser à chaque tour.

  4. #4
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 392
    Points
    19 392
    Par défaut
    Citation Envoyé par Levi59
    Pour définir de nouvelles variables à partir d'autres variables à la volée dans un script, il faut utiliser "eval" :
    Pour définir des variables, il faut utiliser declare.

    cependant, la remarque de matafan est très juste.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 221
    Points : 108
    Points
    108
    Par défaut
    Citation Envoyé par matafan Voir le message
    Remarque bien que dans ce cas tu n'as pas besoin de créer une variable "nb1", "nb2"... différente à chaque tour de boucle. Tu peux te contenter d'avoir une seule variable "nb" et la réutiliser à chaque tour.
    donc si j'ai bien suivi il faut faire quelque chose du genre:

    Code sh : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    n=`find /home/sasalim/TKA -type f -name "*.log_20111007" |wc -l`
    i=1 
    while [ $n -ge $i ] 
    do   
        #echo "i="$i   
        #echo `find -type f |ls -al`   
        echo "Nombre de lignes du fichier fich$i.log_2011100 : "  `cat fich$i.log_20111007 |wc -l`         
        nb=`cat fich$i.log_20111007 |wc -l`   
        echo "nb=" nb 
          i=`expr $i + 1` 
    done

    C'est bien ça?

  6. #6
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 392
    Points
    19 392
    Par défaut
    j'ai oublié de dire : cat n'est pas indispensable :expr non plus : le shell peut faire l'évaluation arithmétique.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  7. #7
    Membre habitué Avatar de Levi59
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2011
    Messages : 58
    Points : 148
    Points
    148
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    Pour définir des variables, il faut utiliser declare.
    J'avais faux? Pourtant ça marche chez moi...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $: a=1
    $: b$a=2
    bash: b1=2 : commande introuvable
    $: eval b$a=2
    $: echo $b1
    2
    Carpe Diem

  8. #8
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 392
    Points
    19 392
    Par défaut
    oui, ça marche, mais ce n'est pas pour autant que c'est bien.
    eval est une commande dangereuse : elle transforme en commande tout ce qui lui passe entre les pattes.

    =>
    eval c'est mal !
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  9. #9
    Membre habitué Avatar de Levi59
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2011
    Messages : 58
    Points : 148
    Points
    148
    Par défaut
    Ok! Merci d'avoir précisé. Je ferais attention dorénavant.
    Carpe Diem

Discussions similaires

  1. script shell: problème avec le caractère espace
    Par Le fut dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 04/05/2017, 11h49
  2. Problème Script shell
    Par bombers dans le forum Shell et commandes GNU
    Réponses: 16
    Dernier message: 02/12/2014, 15h57
  3. problème script shell
    Par ben_tiba_asma dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 22/10/2011, 18h12
  4. problème script shell
    Par joelulrich dans le forum Shell et commandes GNU
    Réponses: 6
    Dernier message: 09/12/2010, 18h14
  5. problème script shell
    Par jeje69 dans le forum Shell et commandes GNU
    Réponses: 0
    Dernier message: 09/01/2008, 14h30

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