test sur chaine

test sur chaine - Shell/Batch - Programmation

Marsh Posté le 22-07-2010 à 21:01:14    

Bonjour,
Voici un script

Code :
  1. #!/bin/bash
  2. for Module in  Module::Build XML::Simple Compress::Zlib Net::IP Digest::MD5 Net::SSLeay Compress::Raw::Zlib IO::
  3. Compress::Deflate URI IO::Uncompress::Gunzip IO::Uncompress::Inflate IO::Compress::Gzip IO::Uncompress::RawInfla
  4. te Compress::Raw::Bzip2 Compress::Raw::Zlib HTML::Tagset HTML::Parser XML::SAX XML::NamespaceSupport XML::Namesp
  5. aceSupport XML::SAX::Base XML::SAX::Expat XML::Parser Crypt::SSLeay IO::Socket::SSL Proc::Daemon Proc::PID::File
  6. HTTP::Status FusionInventory::Agent
  7. do
  8. echo "Valeur de Module = $Module"
  9. resultat=`perlmod -s $Module | grep "No results found."`
  10. echo "resultat avant $resultat"
  11. if [ $resultat = 'No results found.' ]
  12. then
  13. {
  14. echo "resultat apres $?"
  15. perlmod -i $Module
  16. echo "dedans"
  17. }
  18. else
  19. echo "Package disponible et resultat= $resultat"
  20. fi
  21. done
  22. exit 0


Quand j'affiche avec echo la variable resultat je constate bien la onne chaine mais avec la commande od on voit un caractere d'echappement juste devant qui est 0033 [ 0 m ou untruc du meme genre.
 Comment procéder pour eviter cela ou faire un test sur resultat qui soit pertinent?
Merci

Reply

Marsh Posté le 22-07-2010 à 21:01:14   

Reply

Marsh Posté le 23-07-2010 à 09:18:18    

Tu peux te contenter de tester la présence de la chaîne sans la récupérer.

Code :
  1. echo "Valeur de Module = $Module"
  2. if perlmod -s $Module | grep -q "No results found."`
  3. then
  4.    echo "Package non trouvé."
  5.    perlmod -i $Module
  6.    echo "dedans"
  7. else
  8.    echo "Package disponible."
  9. fi


 
Jean-Pierre.

Reply

Marsh Posté le 23-07-2010 à 11:41:21    

Oui merci effectivement ça marche
Y a t'il un moyen de modifier ce comportement et de supprimer ce caractere d'echappement?
Merci

Reply

Marsh Posté le 23-07-2010 à 15:39:33    

Les scripteurs extraient des chaines avec sed souvent, pour éliminer tous les trucs superflus.

Reply

Marsh Posté le 23-07-2010 à 15:43:44    

C'est ta commande perlmod qui génère des séquences escape pour faire formater les affichages (<esc>[1m pour mettre en gras ou reverse, <esc>[0m pour revenir en mode normal).
 
Tu peux essayer de forcer le type de terminal le temps de la commande perlmod pour voir si cela modifie les affichages; par exemple :

Code :
  1. TERM=TTY perlmod -s $Module

ou peut être tout simplement

Code :
  1. TERM= perlmod -s $Module


 
Jean-Pierre.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed