Linux bash : pourquoi ma condition ne fonctionne pas

Linux bash : pourquoi ma condition ne fonctionne pas - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 25-07-2013 à 11:04:42    

Bonjour à tous,
 
aujourd'hui une question très simple, je cherche à savoir pourquoi ma condition ne fonctionne pas, je suis en #!/bin/sh
je mets une valeur dans $tomcatversion (ici tomcat-7.0.30) ensuite je voudrais que si cette version contient *current* elle
fasse un truc sinon un autre  
 
tomcat ici peut avoir 2 valeurs : tomcat6-current ou tomcat-7.0.30 voici le script  
 

Citation :

function TomcatCurrentToReal {
if [[ $tomcatversion == "*current*" ]] ;
 then
  echo $tomcatversion
  tomcatversion=`ssh tomcat@$clustername "ls -lrt /ccv/app/tomcat/" | grep current | cut -d">" -f2 | cut -d"/" -f1`
  echo "CATALINA_HOME then:" $tomcatversion
   
 else
  echo "CATALINA_HOME  else:"$tomcatversion
fi }


 
dans cette version peut importe la version de TOMCAT c'est TOUJOURS le ELSE qui l'emporte
 
et dans celui ci c'est TOUJOURS le THEN  
 

Citation :

function TomcatCurrentToReal {
if [[ $tomcatversion=="*current*" ]] ;
 then
  echo $tomcatversion
  tomcatversion=`ssh tomcat@$clustername "ls -lrt /ccv/app/tomcat/" | grep current | cut -d">" -f2 | cut -d"/" -f1`
  echo "CATALINA_HOME then:" $tomcatversion
   
 else
  echo "CATALINA_HOME  else:"$tomcatversion
fi }


 
il n'y a que les espace avant et après le '==' qui ont été supprimés  
 
pourquoi ma condition ne fonctionne pas, j'ai aussi testé ça :
 

Citation :

function TomcatCurrentToReal {
if [ $tomcatversion = *current* ] ;
 then
  echo $tomcatversion
  tomcatversion=`ssh tomcat@$clustername "ls -lrt /ccv/app/tomcat/" | grep current | cut -d">" -f2 | cut -d"/" -f1`
  echo "CATALINA_HOME then:" $tomcatversion
   
 else
  echo "CATALINA_HOME  else:"$tomcatversion
fi }


 
et la encore c'est TOUJOURS le ELSE qui prime ...
 
help  [:athome]


Message édité par Sndk le 25-07-2013 à 11:05:57

---------------
Mon topic - Mon Feed-Back
Reply

Marsh Posté le 25-07-2013 à 11:04:42   

Reply

Marsh Posté le 25-07-2013 à 11:24:00    

le soucis vient des * (wildcards) si je recherche la valeur exacte ALORS cela fonctionne
 
exemple : $tomcatversion=tomcat-7.0.30
 

Citation :

if [ $tomcatversion = tomcat-7.0.30 ] ;
then
      echo "ça fonctionne"


 

Citation :

if [ $tomcatversion = *tomcat* ] ;
then
       echo  
else
       echo "ça ne fonctionne pas !"


 
une idée ?


Message édité par Sndk le 25-07-2013 à 11:25:32

---------------
Mon topic - Mon Feed-Back
Reply

Marsh Posté le 25-07-2013 à 11:26:43    

if [[ $tomcatversion = *"current"* ]]
 
Il faut utiliser les doubles brackets pour que bash interprète la partie droite de la comparaison comme étant un pattern. Les quotes sont optionnelles, mais je les mets quand même pour éviter que ta chaine de caractères contienne des caractères interprétés comme étant eux même des patterns.

Reply

Marsh Posté le 25-07-2013 à 12:01:20    

5h à me prendre la tête dessus et 3mn plus tard tu me donne la solution ... j'adore internet .. et je te remercie infiniment !!!!!!!!!
 
MER-CI :)


---------------
Mon topic - Mon Feed-Back
Reply

Sujets relatifs:

Leave a Replay

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