Script shell en utilisant des conditions

Résolu/Fermé
flipmode62 Messages postés 49 Date d'inscription lundi 1 décembre 2008 Statut Membre Dernière intervention 20 mai 2010 - 3 déc. 2008 à 17:27
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 - 3 déc. 2008 à 18:33
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

jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 894
3 déc. 2008 à 17:57
Salut,

Change les délimiteurs de la commande de substitution.
Modifie :
s/=.*/=$(echo $var1)/
en :
s|=.*|=$(echo $var1)|
;-))
1
XxTitxX Messages postés 1176 Date d'inscription samedi 24 mai 2008 Statut Membre Dernière intervention 30 août 2012 246
3 déc. 2008 à 17:31
Tiens tu peux t'aider de ça ...
http://fr.wikipedia.org/wiki/Test_(Unix)
0
flipmode62 Messages postés 49 Date d'inscription lundi 1 décembre 2008 Statut Membre Dernière intervention 20 mai 2010
3 déc. 2008 à 17:50
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
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 894
3 déc. 2008 à 18:13
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
flipmode62 Messages postés 49 Date d'inscription lundi 1 décembre 2008 Statut Membre Dernière intervention 20 mai 2010 > jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020
3 déc. 2008 à 18:28
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
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 894 > flipmode62 Messages postés 49 Date d'inscription lundi 1 décembre 2008 Statut Membre Dernière intervention 20 mai 2010
3 déc. 2008 à 18:33
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
flipmode62 Messages postés 49 Date d'inscription lundi 1 décembre 2008 Statut Membre Dernière intervention 20 mai 2010
3 déc. 2008 à 18:10
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