Léa-Linux & amis :   LinuxFR   GCU-Squad   Zarb.Org   GNU
Archive de la liste aide - [Aide] problème avec une fonction dans un script bash
Walaa!

Comment tu vas faire si tu dois relever des milliers de compteurs? Tu
ne vas pas tout rentrer à la main dans ton script quand même...

Quant tu touches à la programmation, même en shell, il faut penser:
- simplicité
- sécurité
- réutilisation

Encore une fois, tu n'as pas besoin de ta fonction decimal().

Crée une boucle pour récupérer tes index et écrire ton fichier ce sera
bien plus simple si tu dois relever plus de compteurs (ou moins)

Vérifie la présence de tous tes programmes externes;



---------
Pour ma part, je fonctionnerais avec un script plutôt simple (à
debugguer sans doute):

#!/bin/bash
# releve_compteur.sh

# On déclare un tableau associatif [bus knx]="description"
declare -A compteurs=(
["0/1/4"]="éclairage publique 1 Phase 1"
["0/2/4"]="éclairage publique 1 Phase 2"
["0/3/4"]="éclairage publique 1 Phase 3"
)

# On définit l'adresse mail
MAIL="admin at moi.fr"

# On définit le fichier de sortie
# Il serait préférable de créer un fichier temporaire avec mktemp
CSV_FILE="/home/cantine/index.csv"

# On définit l'adresse IP
IP="127.0.0.1"

# Il faudrait vérifier la présence de la commande mutt et de
# groupreadresponse
command -v mutt >/dev/null 2>&1 || { echo >&2  "Impossible de trouver
le programme mutt"; exit 2;}
command -v groupreadresponse >/dev/null 2>&1 || { echo >&2  "Impossible
de trouver le programme groupreadresponse"; exit 2;}


# Si CSV_FILE existe, on ne le supprime pas et on envoit un message
# d'erreur
if [ -e "$CSV_FILE" ]
then
 mutt -s "Erreur de relève des compteurs" -- $MAIL <<< "${CSV_FILE}
 existe déjà"
 exit 1
fi


# On crée une boucle
# ${!compteurs[@]} va renvoyer toutes les clés du tableau associatif
for knx in "${!compteurs[@]}"; do
 index=$(groupreadresponse ip:$IP ${knx})

 # on récupère les données hexa (après le dernier ": ")
 # et on convertit les données hexa en décimal
 index =$((0x${index##*: }))   # ne pas oublier l'espace après le ":"

 echo "index ${compteurs[$knx]},${index}" >> /home/cantine/index.csv
done

# On envoit le mail avec le fichier csv en pièce jointe
mutt -s "Relève des compteurs" -a ${CSV_FILE} -- $MAIL

# On nettoie derrière nous
rm -f ${CSV_FILE}

Serveur hébergé par ST-Hebergement et Lost-Oasis / IRC hébergé par FreeNode / NS secondaire hébergé par XName
Sauf mention contraire, les documentations publiées sont sous licence Creative-Commons