[Script shell] Incrémenter un entier

Bonjour,
Ca doit être couillon, mais je galère...

Voici ce que je veux faire :
- savoir combien de fois un fichier contient la chaine "Enlève ta culotte, bébé : j'arrive !" (NdlR : le lecteur avisé relèvera l'effort d'originalité...)
- et juste pour mentir ou parce que je trouve ça plus funky, rajouter "un" à ce nombre.

Pour l'instant, j'ai ça :
grep "Enlève ta culotte, bébé : j'arrive !" ./MonFichierTropCool | wc -l | cat | read NbIteChaine
NbIteChaine=$(expr $NbIteChaine + 1)


Mais...
echo $NbIteChaine
ne veut rien savoir et me renvoie
$(expr 3 + 1)
quand la chaine apparait 3 fois dans le fichier par exemple. Alors que moi, naïf et dépressif, j'attends le résultat "4".

J'ai beau essayer d'inombrables combinaisons de positions des $, Bébé me résiste aujourd'hui ! :p
Configuration: Windows 2000
Internet Explorer 6.0

9 réponses

  1. Enfin ! C'était un problème de syntaxe sur l'utilisation de "expr". La réponse et donc :
    grep -c "Enlève ta culotte, bébé : j'arrive !" ./MonFichierTropCool | cat | read NbIteChaine
    NbIteChaine=`expr $NbIteChaine + 1`

    Problème résolu. :-)
    1. Modérateur
      Salut,

      peut être ce sont les accents
      essaie
      echo $(grep -c "Enl.ve ta culotte, b.b. : j'arrive" ./MonFichierTropCool) 

      1. Pour régler la question du "!", je l'ai viré et... ça ne change rien.
        Monde cruel...
        1. Je fais un peu de proselytisme pour awk:

          awk '
          BEGIN {sum = 1;}
          /"Enlève ta culotte, bébé : j'arrive !"/ { sum += 1; }
          END { print "nombre de lignes: " sum; }'
          MonFichierTropCool

          Pour les operations mathematiques en ksh, je trouve que les double parentheses sont + pratiques:
          toto = 5
          (( toto = toto + 1 ))
          print "toto = ${toto}"
          est plus pratique que expr mais c'est affaire de gout...
      2. Modérateur
        Essaie en le protégeant alors :
        grep -c "Enlève ta culotte, bébé : j'arrive \!"
        ;-))
        1. Toujours pas :(
          Mais j'avais raté un détail...
          Il faut enlever les guillemets de mon message <12>. Ca va peut-être vous mettre la puce à l'oreille, parce que moi, ça ne m'inspire pas plus !
          1. Modérateur
            Enlève le point d'exclamation de ton expression :
            $(grep -c "Enlève ta culotte, bébé : j'arrive " ./MonFichierTropCool) 
            Ça devrait passer ;-))
            1. Modérateur
              Salut,

              Et est-ce qu'un :
              NbIteChaine=$(expr $(grep -c grep -c "Enlève ta culotte, bébé : j'arrive !" ./MonFichierTropCool) + 1)
              ne serait pas plus simple ?

              ;-))
              1. Modérateur
                Salut,

                pour Enlève la culotte, oui il faut une solution plus simple :-DDD et aussi rapide :-DDD
              2. Le coup du $(grep -c trucmuche) ne semblait pas marcher, cf. message <4>. J'avoue que je ne sais pas pourquoi. :-/

                @lami20j: tssss... :p
              3. Modérateur
                @0seb0Alors là, un echo $NbIteChaine juste après me renvoie (au lieu de "3") :
                Te renvoie quoi ? ;-\
              4. @0seb0ca :

                $(grep -c "Enlève ta culotte, bébé : j'arrive !" ./MonFichierTropCool)

                oO'
            2. Ca ne serait pas une question d'espaces dans la ligne suivante ?
              NbIteChaine=$(expr $NbIteChaine + 1)
              1. Contributeur
                pourquoi ne pas utiliser l'option -c de grep :
                -c Suppress normal output; instead print a count of matching lines
                for each input file
                1. ...mais parce que je ne connaissais pas cette option bien sûr !

                  Donc j'ai maintenant :
                  grep -c "Enlève ta culotte, bébé : j'arrive !" ./MonFichierTropCool | cat | read NbIteChaine

                  à la place de la première ligne, mais à vrai dire... ça ne change rien à mon souci, en fait. :o

                  Merci en tous cas !
                2. Contributeur
                  Pour sauver le résultat:
                  NbIteChaine=$(grep -c "Enlève ta culotte, bébé : j'arrive !" ./MonFichierTropCool)
                3. @dubcekHum...

                  Alors là, un echo $NbIteChaine juste après me renvoie (au lieu de "3") :
                  $(grep -c "Enlève ta culotte, bébé : j'arrive !" ./MonFichierTropCool)

                  Ou alors j'ai raté un épisode. oO'