Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 12/03/2015, à 17:12

tome80

[RESOLU] comparaison réels BC

Bonjour,

Je fais un script (pour m'initier) et je voudrais faire en sort que selon un test de comparaison des réels je m'envoi un mail.
pour le mail j’utilise ssmtp
mails je rencontre un problème lors les test IF

j'ai une variable a=900 (qui va varier car je la récupère avec wget)
b=910
c=880

je fais ça (je l'ai trouvé dans sur un forum) mais le test ne fonctionne pas

if $("$a" <= "$c") ||  $("$a" => "$b")

j'ai vu des pistes sur net mais c'est pour des sujet complexes du coup les solutions sont aussi.

type

if [ $(echo " $a < $b" | bc) -eq 1 ]                                                  pourquoi "-eq 1" ? pourquoi "$" avant tout ?

et su j'ai deux tests test1 || test2 ?

pouvez vous me donner la solution ou une piste avec explication des différents paramètres ?

merci

Dernière modification par tome80 (Le 13/03/2015, à 14:16)


..........quand il est éteint il ne rame pas, c'est sur ..........

Hors ligne

#2 Le 12/03/2015, à 17:36

pingouinux

Re : [RESOLU] comparaison réels BC

Bonjour,

Pour faire au plus simple (si ce sont des entiers)

(( (a<=c) || (a>=b) )) && echo "test ok" || echo "test pas bon"

Ajouté :
Pour des réels

[ $(bc <<<"($a<=$c) || ($a>=$b)") -ne 0 ] && echo "test ok" || echo "test pas bon"

Dernière modification par pingouinux (Le 12/03/2015, à 17:45)

Hors ligne

#3 Le 12/03/2015, à 17:57

erresse

Re : [RESOLU] comparaison réels BC

tome80 a écrit :

pouvez vous me donner la solution ou une piste avec explication des différents paramètres ?

Pour la "solution" bravo, merci pingouinux, mais "l'explication des différents paramètres", c'est ça qui serait chouette ! tongue


Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois résolu, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.

Hors ligne

#4 Le 12/03/2015, à 18:28

pingouinux

Re : [RESOLU] comparaison réels BC

  1. La forme (( expression )) évalue l'expression qu'elle contient, et son code de retour vaut
    0 si l'expression est différente de 0 (ou vraie)
    1 dans le cas contraire
    Ça peut prêter à confusion, car les valeurs sont inversées.

  2. bc peut calculer avec des réels et renvoie le résultat du calcul. Si c'est une expression logique, vrai se traduit par 1, et faux par 0. Il faut ensuite tester cette valeur, mais on peut faire aussi

    (( $(bc <<<"($a>=$c) || ($a>=$b)") )) && echo "test ok" || echo "test pas bon"

    Remarque :

    bc <<<"($a>=$c) || ($a>=$b)"

    est équivalent à

    echo "($a>=$c) || ($a>=$b)" | bc

Hors ligne

#5 Le 12/03/2015, à 18:33

erresse

Re : [RESOLU] comparaison réels BC

Merci pingouinux,
La syntaxe du script bash est décidément aussi ardue que celle du langage C...
J'espère que tome80 fera son profit de tes précisions.


Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois résolu, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.

Hors ligne

#6 Le 12/03/2015, à 19:02

tome80

Re : [RESOLU] comparaison réels BC

Merci beaucoup pour le rapidité, j'aurais jamais trouvé, suis depuis ce matin...

je vous montre le script exact car je pense qu'il y a des doublons  et pour ça j'ai encore des erreurs.
Si le script parait pas "propre" désolé (y a certainement plus efficace ou joli) je met des commentaire partout pour me souvenir de ce que fais la cmd + valider jusqu'à où ça fonctionne.

pingouinux: merci pour les explications,

voilà le script

#!/bin/bash
site=http://bourse.lesechos.fr/
#telecharge le site et affiche reponse 200 OK si OK
wget -O /tmp/bourse.tmp $site
echo "Telechargement OK"
sed -i -n 1377p /tmp/bourse.tmp
cac40=`cut -d">" -f2 /tmp/bourse.tmp`
cac40=${cac40%??????}
echo "Valeur de CAC 40 : $cac40 "

min=4986,30
max=4986,90

if [ $(bc <<<"($cac40<=$min) || ($cac40>=$max)") -ne 0 ] && echo "test ok" || echo "test pas bon"

then

#echo -e "La valeur de la CAC 40 a changé \nValeur actuelle : $cac40"
mail -s "ALERTE !!! LE MONDE VA S'EFONDRE" monmail@gmail.fr

#else echo "C'EST PAS BON !"

fi

Dernière modification par tome80 (Le 12/03/2015, à 19:02)


..........quand il est éteint il ne rame pas, c'est sur ..........

Hors ligne

#7 Le 13/03/2015, à 00:25

pingouinux

Re : [RESOLU] comparaison réels BC

Essaye ceci. J'ai remplacé les virgules décimales par des points (je suis en version anglaise, mais c'est peut-être nécessaire pour bc même en français). Il y avait aussi un espace insécable dans la valeur numérique (\xc2\xa0 en utf8).

#!/bin/bash
site=http://bourse.lesechos.fr/
#telecharge le site et affiche reponse 200 OK si OK
wget -O /tmp/bourse.tmp $site
echo "Telechargement OK"

cac40=$(sed -n '1377p' /tmp/bourse.tmp | sed -r 's/.*>(.*)<.*/\1/;s/\xc2\xa0//;s/,/./')
echo "Valeur de CAC 40 : $cac40 "

min=4986.30
max=4986.90

if [ $(bc <<<"($cac40<=$min) || ($cac40>=$max)") -ne 0 ]
then

echo -e "La valeur de la CAC 40 a changé \nValeur actuelle : $cac40"
#mail -s "ALERTE !!! LE MONDE VA S'EFONDRE" monmail@gmail.fr

else echo "C'EST PAS BON !"

fi

Édité : Correction

Dernière modification par pingouinux (Le 13/03/2015, à 00:42)

Hors ligne

#8 Le 13/03/2015, à 14:16

tome80

Re : [RESOLU] comparaison réels BC

WOOOOOOW !

sed -r 's/.*>(.*)<.*/\1/;s/\xc2\xa0//;s/,/./' ????

pas besoin d'explications te fatigue pas, ça va être trop pour moi.
Mais je vais essayer d’analyser cela un peu plus tard avec toutes les infos que tu as mis, je pense il faut une forte connaissance de SED que j’évite... me parait très complexe. 

RESOLU

Merci pingouinux


..........quand il est éteint il ne rame pas, c'est sur ..........

Hors ligne

#9 Le 13/03/2015, à 14:41

pingouinux

Re : [RESOLU] comparaison réels BC

s/.*>(.*)<.*/\1/ : remplacement de
.*> :               0 ou plus caractères quelconques suivis de >
(.*) :               0 ou plus caractères quelconques (les parenthèses servent à stocker provisoirement ce résultat)
<.* :               < suivi de 0 ou plus caractères quelconques
par
\1 :                contenu stocké par les parenthèses (en fait, le nombre cherché, pas encore complètement mis en forme)

s/\xc2\xa0// : remplacement de l'espace insécable par rien

s/,/./ :             remplacement de la virgule par un point

Hors ligne