Script shell en utilisant des conditions

Résolu
Bonjour,

J'aimerai créer un script shell en utilisant des conditions mais ça ne marche pas :(

if [ var1 > "1200" ]; then
var1="<b><font color=#0c00ff>$var1</font></b>"
else
var1="<b><font color=#ce0000>$var1</font></b>"
fi


Merci pour votre aide

Flipmode
Configuration: Linux Red Hat
Firefox 1.5.0.12

4 réponses

  1. Modérateur
    Salut,

    Change les délimiteurs de la commande de substitution.
    Modifie :
    s/=.*/=$(echo $var1)/
    en :
    s|=.*|=$(echo $var1)|
    ;-))
    1
    1. Tiens tu peux t'aider de ça ...
      http://fr.wikipedia.org/wiki/Test_(Unix)
      0
      1. Mon script est de la forme:

        ........................
        if [ var1 < 1200 ]; then
        var1="\"<b><font color=#0c00ff>$var1</font></b>\""
        else
        var1="\"<b><font color=#ce0000>$var1</font></b>\""
        fi

        ......................
        ......................
        sed -i.bak "/localhost/,/}/{
        /^label_text/{s/=.*/=$(echo $var1)/}
        }

        ......................
        .....................

        Quand j'execute mon script, j'ai l'erreur :
        sed: -e expression #1, char 70: unknown option to `s'

        Si j'affiche var1, j'obtiens:

        echo $var1
        <b><b><font color=#0c00ff> 8533</font></b>


        Donc le probléme dans mon script est au niveau de:
        sed -i.bak "/localhost/,/}/{
        /^label_text/{s/=.*/=$(echo $var1)/}
        }


        C'est le meme problème que: http://www.commentcamarche.net/forum/affich 9693322 script pour ecrire dans un fichier texte

        Mais je n'arrive pas à régler ce probléme

        Merci

        Flipmode
        0
        1. Modérateur
          Ta condition ne marche pas non plus ;-((

          if [ var1 < 1200 ]; then
          var1="\"<b><font color=#0c00ff>$var1</font></b>\""


          echo $var1
          <b><b><font color=#0c00ff> 8533</font></b>


          C'est à cause que la comparaison arithmétique se fait soit de cette façon :
          if [ "$var1" -lt "1200" ]; then...

          soit (attention il ne faut pas d'espace entre les 2 crochets ouvrants, je le mets uniquement pour palier un bug dans la mise en forme des balises par le code interne de CCM) :
          if [ [ $var1 < 1200 ]]; then...
          0
        2. @jipicyMerci pour ta réponse
          Mon test ne marchait pas :(
          Il ne changeait pas la couleur de mon texte! Avec les doubles [] ça fonctionne bien :)

          Et en mettant: s|=.*|=$(echo $var1)| à la place de s/=.*/=$(echo $var1)/ ça marche

          Par contre quand je fais:echo $var1
          <b><font color=#0c00ff> 8533</font></b>


          Dans mon script j'utilise la commande:
          sed -i.bak "/localhost/,/}/{
          /^label_text/{s/=.*/=$(echo $var1)/}
          }


          Dans mon fichier, il met: label_text="<b><font color=#0c00ff> 8533</font></b>" alors que je voudrais qu'il mette label_text=<b><font color=#0c00ff> 8533</font></b> (sans les " ")

          Comment je peux faire pour changer ça?

          Merci

          Flipmode
          0
        3. Modérateur
          @flipmode62La réponse est dans ta déclaration de la vaiable :
          var1="\"<b><font color=#0c00ff>$var1</font></b>\""
          il suffit d'enlever les quotes doubles protégées par un anti-slash :
          var1="<b><font color=#0c00ff>$var1</font></b>" 
          ;-))
          0
      2. Merci :)

        En mettant: s|=.*|=$(echo $var1)| à la place de s/=.*/=$(echo $var1)/ ça marche

        Quand je fais:echo $var1
        <b><font color=#0c00ff> 8533</font></b>


        Mais dans mon fichier, quand j'utilise la commande:
        sed -i.bak "/localhost/,/}/{
        /^label_text/{s/=.*/=$(echo $var1)/}
        }


        Il met: label_text="<b><font color=#0c00ff> 8533</font></b>" alors que je voudrais qu'il mette label_text=<b><font color=#0c00ff> 8533</font></b> (sans les " ")

        Comment je peux faire pour changer ça?

        Merci

        Flipmode
        0