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 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 sad ) 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 smile

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é smile

@+

Hors ligne