Script shell en utilisant des conditions

Résolu
flipmode62 Messages postés 52 Statut Membre -  
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   -
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. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Salut,

    Change les délimiteurs de la commande de substitution.
    Modifie :
    s/=.*/=$(echo $var1)/
    en :
    s|=.*|=$(echo $var1)|
    ;-))
    1
  2. XxTitxX Messages postés 1249 Statut Membre 246
     
    Tiens tu peux t'aider de ça ...
    http://fr.wikipedia.org/wiki/Test_(Unix)
    0
  3. flipmode62 Messages postés 52 Statut Membre
     
    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. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      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
      1. flipmode62 Messages postés 52 Statut Membre > jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention  
         
        Merci 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
      2. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898 > flipmode62 Messages postés 52 Statut Membre
         
        La 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
  4. flipmode62 Messages postés 52 Statut Membre
     
    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