Script shell en utilisant des conditions

[Résolu/Fermé]
Signaler
Messages postés
49
Date d'inscription
lundi 1 décembre 2008
Statut
Membre
Dernière intervention
20 mai 2010
-
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
-
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

4 réponses

Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 881
Salut,

Change les délimiteurs de la commande de substitution.
Modifie :
s/=.*/=$(echo $var1)/
en :
s|=.*|=$(echo $var1)|
;-))
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 42854 internautes nous ont dit merci ce mois-ci

Messages postés
1176
Date d'inscription
samedi 24 mai 2008
Statut
Membre
Dernière intervention
30 août 2012
246
Tiens tu peux t'aider de ça ...
http://fr.wikipedia.org/wiki/Test_(Unix)
Messages postés
49
Date d'inscription
lundi 1 décembre 2008
Statut
Membre
Dernière intervention
20 mai 2010

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
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 881
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...
Messages postés
49
Date d'inscription
lundi 1 décembre 2008
Statut
Membre
Dernière intervention
20 mai 2010
>
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020

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
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 881 >
Messages postés
49
Date d'inscription
lundi 1 décembre 2008
Statut
Membre
Dernière intervention
20 mai 2010

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>" 
;-))
Messages postés
49
Date d'inscription
lundi 1 décembre 2008
Statut
Membre
Dernière intervention
20 mai 2010

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