Bonjour,
J’ai un problème avec un script bash, qui fonctionne apparemment en console, mais pas en tache cron.
Quand je mets “set -xve” je n’ai pas de message d’erreur (en console).
[ le script récupère la température carte mère et processeur et les envois sur un afficheur usb]
Quand j’utilise le script dans une tache cron, voila les messages d’erreurs remontés:
/home/containers/sitronix/affichage_temperature.sh: ligne 32 : [: -ge : opérateur unaire attendu
/home/containers/sitronix/affichage_temperature.sh: ligne 35 : [: -lt : opérateur unaire attendu
(je sais ce que vous allez dire: un exécutable dans ce répertoire, c’est pas top, mais c’est pour évaluer la faisabilité). Avec cron, j’ai bien une image, mais avec l’heure, Zero, et la température carte mère (cf tout en bas).
Le script:
!#/bin/env /bin/bash
# set -xve
#-----------------------------------------------------
# affichage de la temperature sur écran d'un petit
# appareil 'digital photo frame'
# hack sous linux ici:
# http://neophob.com/2009/01/photo-frame-hack-updated-libst2205/
#-----------------------------------------------------
#
# on envoi la température au script et il l'affiche sur le péripherique
# R. Suinot <remi@suinot.org>
# 08 juillet 2011
# Dépendances: imagemagick
# st2205tools
# libgd2-xpm-dev (pour compiler st2205tools) sauf si libst2205 utilise.
# digitemp
#-----------------------------------------------------
# convert -bordercolor green -border 5 -background lightblue -fill red -size 90x90 -pointsize 30 label:"+24°C" label.png
# Temperature=`/usr/bin/digitemp_DS2490 -t 0 -q -c /etc/digitemprc -o%.0C`
cd /home/containers/sitronix
Temperature=`cat /tmp/Core-0.txt `
Carte_Mere=`cat /tmp/Temp3.txt `
Texte0=`echo $Temperature | awk -F '[\+\.]' '{ print $2 }'`
Tmp="/tmp/label.txt"
Image="/tmp/label.png"
expr $Texte0 + 0 1>/dev/null 2>&1
if [ $? -eq 0 -o $? -eq 1 ]; then
if [ $Texte0 -ge 1 ]; then
# supérieur ou égal à 1
Texte0="+"$Texte0"°C"
elif [ $Texte0 -lt 0 ]; then
# inférieur à zéro
Texte0="-"$Texte0"°C"
else
# alors $Texte0 egale zéro
Texte0="Zéro"
fi
else
echo "*** non numerique"
return
fi
echo " \n" > $Tmp
echo $Texte0 >> $Tmp
# Arrivé ici, on continu pour la température carte mère
Texte1=`echo $Carte_Mere | awk -F '[\+\.]' '{ print $2 }'`
expr $Texte1 + 0 1>/dev/null 2>&1
if [ $? -eq 0 -o $? -eq 1 ]; then
if [ $Texte1 -ge 1 ]; then
# supérieur ou égal à 1
Texte1="+"$Texte1"°C"
elif [ $Texte1 -lt 0 ]; then
# inférieur à zéro
Texte1="-"$Texte1"°C"
else
# alors $Texte1 egale zéro
Texte1="Zéro"
fi
else
echo "*** non numerique"
return
fi
echo $Texte1 >> $Tmp
h=`date +%k"h"%M`
# Définition des options pour le programme convert:
Texte=$h"\n"$Texte0"\n"$Texte1
echo $Texte > $Tmp
Border=2
BorderColor="green"
Backgr="lightblue"
TextColor="Red"
SizeEcran="90x90"
SizeText=17
Gravity="North"
convert -bordercolor $BorderColor -border $Border -background $Backgr -fill $TextColor -size $SizeEcran -pointsize $SizeText -gravity $Gravity label:$Texte $Image
# recherche de l'afficheur dans /dev
Device="/dev/"`ls -l /dev/disk/by-id/ | grep SITRONIX | awk '{print substr( $0, length($0) - 2, length($0))}'`
if [ -n $Device ]; then
cp $Tmp "$PWD/"
cp $Image "$PWD/"
# envoi de l'image à l'afficheur
/usr/local/bin/setpic $Device $Image >/dev/null 2>&1
fi
Le contenu des fichiers:
$ cat /tmp/Core-0.txt
+48.0°C
$ cat /tmp/Temp3.txt
+29.0°C
Le résultat au travers de cron:
$ cat /tmp/label.txt
11h30\nZéro\n+28°C
Pareil, mais en console:
$ cat /tmp/label.txt
11h41\n+48°C\n+28°C
J’avoue ne pas comprendre d’ou vient le problème!!!
Si vous pouviez m’éclairer de vous lumières, je vous en serais éternellement reconnaissant.
Rémi.