Bonjour,

Je viens vous demander de l'aide car j'ai un problème avec ma boucle.
J'ai créer un plugin nagios, celui fonctionne mais j'ai des problèmes avec certaines remontés...

Concernant le script le voici :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#On va chercher la valeur
val=$(/tmp/bacnet-stack-0.8.3/bin/bacrp $AUTOMATE $OBJECT $IDENTIFIER 85 | sed 's/\r//')
unite=$(/tmp/bacnet-stack-0.8.3/bin/bacrp $AUTOMATE $OBJECT $IDENTIFIER 117 | sed 's/\r//')
 
 
#Arrondir le nombre
valeur=$(echo $val | cut -f1 -d\.)
 
 
#Réinscription de l'unité
unity=$(echo $unite | sed 's/degrees-celsius/°C/g' | sed 's/percent/%/g' | sed 's/no-units//g' | sed 's/kilowatt-hours/kWh/g' | sed 's/cubic-meters-per-hour/m3h/g' | sed 's/watts/W/g' | sed 's/meters/m/g' | sed 's/hours/h/g' | sed 's/revolutions-per-minute/tr\/min/g')
 
 
#Condition
if (( $(echo "$valeur > $CRIT" | bc -l) ));then
        echo " "$valeur" "$unity" | $unity=$valeur;$WARN;$CRIT;0;$MAX " && exit 2
elif (( $(echo "$valeur >= $WARN" | bc -l) ));then
        echo " "$valeur" "$unity" | $unity=$valeur;$WARN;$CRIT;0;$MAX " && exit 1
else
        echo " "$valeur" "$unity" | $unity=$valeur;$WARN;$CRIT;0;$MAX " && exit 0
fi
Sauf que parfois il arrive que le script ne me remonte pas une valeur mais un message d'erreur qui n'est pas important sauf que cela fausse ma supervision.

C'est pourquoi j'aimerai lorsque mes variables $val et $unite ont pour valeur "Error: APDU Timeout!" que l'on relance les commandes :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
val=$(/tmp/bacnet-stack-0.8.3/bin/bacrp $AUTOMATE $OBJECT $IDENTIFIER 85 | sed 's/\r//')
unite=$(/tmp/bacnet-stack-0.8.3/bin/bacrp $AUTOMATE $OBJECT $IDENTIFIER 117 | sed 's/\r//')
Donc j'ai mis mon script dans une boucle...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#On va chercher la valeur
val=$(/tmp/bacnet-stack-0.8.3/bin/bacrp $AUTOMATE $OBJECT $IDENTIFIER 85 | sed 's/\r//')
unite=$(/tmp/bacnet-stack-0.8.3/bin/bacrp $AUTOMATE $OBJECT $IDENTIFIER 117 | sed 's/\r//')
 
 
if [$val = "Error: APDU Timeout"] || [$unite = "Error: APDU Timeout"];then
        val=$(/tmp/bacnet-stack-0.8.3/bin/bacrp $AUTOMATE $OBJECT $IDENTIFIER 85 | sed 's/\r//')
        unite=$(/tmp/bacnet-stack-0.8.3/bin/bacrp $AUTOMATE $OBJECT $IDENTIFIER 117 | sed 's/\r//')
 
        #Arrondir le nombre
        valeur=$(echo $val | cut -f1 -d\.)
 
 
        #Réinscription de l'unité
        unity=$(echo $unite | sed 's/degrees-celsius/°C/g' | sed 's/percent/%/g' | sed 's/no-units//g' | sed 's/kilowatt-hours/kWh/g' | sed 's/cubic-meters-per-hour/m3h/g' | sed 's/watts/W/g' | sed 's/meters/m/g' | sed 's/hours/h/g' | sed 's/revolutions-per-minute/tr\/min/g')
 
 
        #Condition
        if (( $(echo "$valeur > $CRIT" | bc -l) ));then
                echo " $valeur $unity | $unity=$valeur;$WARN;$CRIT;0;$MAX " && exit 2
        elif (( $(echo "$valeur >= $WARN" | bc -l) ));then
                echo " $valeur $unity | $unity=$valeur;$WARN;$CRIT;0;$MAX " && exit 1
        else
                echo " $valeur $unity | $unity=$valeur;$WARN;$CRIT;0;$MAX " && exit 0
        fi
 
else
        #Arrondir le nombre
        valeur=$(echo $val | cut -f1 -d\.)
 
 
        #Réinscription de l'unité
        unity=$(echo $unite | sed 's/degrees-celsius/°C/g' | sed 's/percent/%/g' | sed 's/no-units//g' | sed 's/kilowatt-hours/kWh/g' | sed 's/cubic-meters-per-hour/m3h/g' | sed 's/watts/W/g' | sed 's/meters/m/g' | sed 's/hours/h/g' | sed 's/revolutions-per-minute/tr\/min/g')
 
 
        #Condition
        if (( $(echo "$valeur > $CRIT" | bc -l) ));then
                echo " $valeur $unity | $unity=$valeur;$WARN;$CRIT;0;$MAX " && exit 2
        elif (( $(echo "$valeur >= $WARN" | bc -l) ));then
                echo " $valeur $unity | $unity=$valeur;$WARN;$CRIT;0;$MAX " && exit 1
        else
                echo " $valeur $unity | $unity=$valeur;$WARN;$CRIT;0;$MAX " && exit 0
        fi
fi

...sauf que c'est pas optimisé, je pense qu'il y a plus simple, et de toute façon cela ne fonctionne pas car il compare une valeur numérique à une chaine de caractère...

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
+ val=25.400000
++ /tmp/bacnet-stack-0.8.3/bin/bacrp 2098247 0 19 117
++ sed 's/\r//'
+ unite=degrees-celsius
+ '[25.400000' = 'Error: APDU Timeout]'
check_siemens.sh: line 41: [25.400000 : commande introuvable
+ '[degrees-celsius' = 'Error: APDU Timeout]'
check_siemens.sh: line 41: [degrees-celsius : commande introuvable
Donc je ne sais pas trop comment faire