Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
780 connectés 

  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  test de variables en shell

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

test de variables en shell

n°1292529
@l Oue$t
Death to humans !
Posté le 06-10-2011 à 23:46:09  profilanswer
 

Salut à tous.
Je commence à coder en shell, et mon programme fonctionne bien, plutôt fier de moi pour un début  :D  
J'ai juste un soucis pour le moment, je voudrais comparer deux variables (via un test for sure) qui ne serait pas entières.
Dans mon script, je cherche à savoir si ma valeur de ping est plus petite qu'une autre, sauf que cette valeur comporte une virgule.
Je pense avoir une piste, en "coupant" ma variable avec awk par exemple, mais j'aimerais savoir s'il est possible de faire autrement.
Merci à vous  :jap:


---------------
1000 lasagnes
mood
Publicité
Posté le 06-10-2011 à 23:46:09  profilanswer
 

n°1292549
Benweb83
Profil: iwinter
Posté le 07-10-2011 à 06:45:56  profilanswer
 

man bc.
 
$> a=1.2
$> b=2.5
$> echo "$a>$b"|bc
0
$> echo "$a<$b"|bc
1


---------------
HFRCoin: 7f1PV1XZc2W9848ykRFEwTuCZzchtTT83W -- Tu l'as trop écrasé, César, ce Port-Salut !
n°1292557
@l Oue$t
Death to humans !
Posté le 07-10-2011 à 09:19:40  profilanswer
 

merci pour ta réponse, je vais test de suite avec bc.  :jap:  
A la base, mon script est en bash, donc je peux pas comparer deux nombres non entiers ... Je sais pas si bc va fonctionner en bash.
 
edit : je n'arrive pas à faire fonctionner ce système. Apparemment |bc après une opération renvoie 0 si c'est faux et 1 si c'est vrai.
J'ai donc fais un |bc avant de rentrer dans ma bouche mais j'ai le même problème.

Code :
  1. test1="&(($minPing -gt $ping))"|bc
  2. if test $test1 -eq 0 ; then
  3. minPing=$ping
  4. dateMinPing=$datePing
  5. fi

Message cité 1 fois
Message édité par @l Oue$t le 07-10-2011 à 09:34:45

---------------
1000 lasagnes
n°1292605
Benweb83
Profil: iwinter
Posté le 07-10-2011 à 15:24:02  profilanswer
 

@l Oue$t a écrit :

merci pour ta réponse, je vais test de suite avec bc.  :jap:
A la base, mon script est en bash, donc je peux pas comparer deux nombres non entiers ... Je sais pas si bc va fonctionner en bash.

 

edit : je n'arrive pas à faire fonctionner ce système. Apparemment |bc après une opération renvoie 0 si c'est faux et 1 si c'est vrai.
J'ai donc fais un |bc avant de rentrer dans ma bouche mais j'ai le même problème.

Code :
  1. test1="&(($minPing -gt $ping))"|bc
  2. if test $test1 -eq 0 ; then
  3. minPing=$ping
  4. dateMinPing=$datePing
  5. fi


 

Y'a pas trop de détails sur ce que tu veux faire ...
Mais à froid :

 
Code :
  1. test1=$(echo "$minPing>$ping"|bc)
  2. [[ "$test1" = "0" ]] && { minPing=$ping ; dateMinPing=$datePing ; }
 

non ?


Message édité par Benweb83 le 07-10-2011 à 15:24:43

---------------
HFRCoin: 7f1PV1XZc2W9848ykRFEwTuCZzchtTT83W -- Tu l'as trop écrasé, César, ce Port-Salut !
n°1292628
@l Oue$t
Death to humans !
Posté le 07-10-2011 à 19:05:44  profilanswer
 

Code :
  1. #!/bin/bash
  2. while [ true ] ; do
  3. timer24h=0
  4. minPing=1000
  5. maxPing=0
  6. succes=0
  7. echec=0
  8. moyennePing=0
  9. minCharge=1000
  10. maxCharge=0
  11. while test $timer24h -ne 288 ; do
  12.  ping -c1 google.com
  13.  if test $? -eq 0 ; then
  14.   heureDebut=$(date '+%s')
  15.   ping=$(ping -c1 127.0.0.1 | grep rtt | awk '{print $4}' | cut -d '/' -f3)
  16.  echo $ping
  17.   succes=$((succes+1))
  18.   datePing=$(date '+%Y-%m-%d %H:%M:%S')
  19.   if test $minPing -gt $ping ; then
  20.    minPing=$ping
  21.    dateMinPing=$datePing
  22.   fi
  23.   if test $maxPing -lt $ping ; then
  24.    maxPing=$ping
  25.    dateMaxPing=$datePing
  26.   fi
  27.   moyennePing=$(((moyennePing+valPing)/succes))
  28.   heureFin=$(date '+%s')
  29.   dureeExec=$((heureFin-heureDebut)) #voir le script "testSleep"
  30.   tempsSleep=$((300-dureeExec))
  31.   timer24h=$((timer24h+1))
  32.   echo $maxPing
  33.   echo $minPing
  34.   echo $moyenne
  35.   echo $maxPing
  36.   sleep $tempsSleep
  37.  else
  38.   echec=$((echec+1))
  39.  fi
  40. done
  41. done


Pour voir le code en entier.
Je vais essayer ta solution Benweb83, mais surement pas ce soir, 5 heures d'info sa m'a suffit \o/.
Merci encore.  :jap:
edit : c'est une partie du code, pour tester le ping justement ^^


Message édité par @l Oue$t le 07-10-2011 à 19:06:23

---------------
1000 lasagnes
n°1294142
sputnick
bip...bip...bip...bip...bi...b
Posté le 21-10-2011 à 23:42:25  profilanswer
 

Code :
  1. aptitude install nagios

=)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  test de variables en shell

 

Sujets relatifs
[SHELL][SOLARIS 8]nombre de jour entre 2 datesScript shell problème avec date
client vpn en shell se connectant à un serveur fortinetCréer un raccourci vers un shell en lancant un programme
Canon IP3600 installation OK; impression page de test NOK[SHELL] Print sur N colonne
J'arrive même pas à faire marcher mon script shell de 3 lignes ![SHELL] incrontab + scp/rsync
Shell Kill Process avec nom[BASH] - Variables et substitution -Resolu
Plus de sujets relatifs à : test de variables en shell


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR