#1 Le 14/06/2006, à 19:44
- ikki
[Résolu] [Bash] Conversion chaine de caractère en entier
Bonjour,
La question est dans le titre et voici l'application.
Je souhaite que mon script arrête de démon FAH si le processeur chauffe à partir d'une certaine température.
Pour cela, je récupere la température processeur sous forme de chaîne de caractère avec la commande sensors.
Voici la source du script :
#/bin/sh
#
# FAHLimit
while true
do
TEMP=`sensors |grep CPU| tail -1 |awk '{print $3}' | cut -c 2-5`
if [ $TEMP = "70.0" -o $TEMP = "70.5" -o $TEMP = "71.0" -o $TEMP = "71.5" -o $TEMP = "72.0" ] ;
then
if pidof FAH502-Linux.exe
then
/etc/init.d/fah stop
logger -t FAH "Deamon FAH stopped because of hysteria temperature !";
break;
fi
fi
sleep 5
done
Je souhaiterai contracter l'affreuse conditionnelle en une formule du type $TEMP > "70.0" mais cette dernière ne fonctionne pas car appparemment il n'y a pas d'opérateur de comparaison sur les chaines de caractère (ordre lexicographique ou ascii ) autre que l'égalité ou l'inégalité.
Le but est donc de "caster" la chaine de caractère en un entier (le fameux parseInt dans d'autres langages).
C'est possible en bash ?
Sinon je pense m'orienter vers le python ...
Merci pour les réponses
Dernière modification par ikki (Le 14/06/2006, à 21:53)
Hors ligne
#2 Le 14/06/2006, à 21:05
- thom
Re : [Résolu] [Bash] Conversion chaine de caractère en entier
Y'a pas de typage en bash..
TEMP="70"
if [ $TEMP -eq 70 ]; then echo 1; fi
-> Ubuntu on a Sony Vaio VNG-FS115B
-> Wificonfig is a little script aimed to ease the switching between networks, for people who have 2 network cards : a wired one and a wireless one.
Hors ligne
#3 Le 14/06/2006, à 21:06
- thom
Re : [Résolu] [Bash] Conversion chaine de caractère en entier
Pour les conditions sur les nombres entiers : http://gershwin.ens.fr/vdaniel/Doc-Locale/Outils-Gnu-Linux/Linux_Doc/Unix-BournShell/node17.html
-> Ubuntu on a Sony Vaio VNG-FS115B
-> Wificonfig is a little script aimed to ease the switching between networks, for people who have 2 network cards : a wired one and a wireless one.
Hors ligne
#4 Le 14/06/2006, à 21:20
- Cathou
Re : [Résolu] [Bash] Conversion chaine de caractère en entier
Bash sait comparer des entiers, mais pas des flottants. Tu peux filtrer un peu plus pour retomber sur un entier:
TEMP=`sensors |grep CPU| tail -1 |awk '{print $3}' | cut -c 2-5 | sed 's/\..//'`
mais sois conscient que cette bidouille avec sed est une troncature.
Après tu n'as plus qu'à faire le test ainsi:
if [ "$TEMP" -gt 70 ] ; then
Dernière modification par Cathou (Le 14/06/2006, à 21:21)
#5 Le 14/06/2006, à 21:52
- ikki
Re : [Résolu] [Bash] Conversion chaine de caractère en entier
c'était bien la pseudo-virgule qui génait.
Ainsi il y a bien un espèce de cast implicite pour la comparaison.
Le code final est donc le suivant :
#/bin/sh
#
# FAHLimit
while true
do
TEMP=`sensors |grep CPU| tail -1 |awk '{print $3}' | cut -c 2-3`
if [ $TEMP -gt 70 ] ;
then
if pidof FAH502-Linux.exe
then
/etc/init.d/fah stop
logger -t FAH "Deamon FAH stopped because of hysteria temperature !";
break;
fi
fi
sleep 5
done
Merci, je vais m'empresser de mettre ce script dans les trucs et astuces et le topic approprié
@+
Hors ligne