Tu veux probablement ça :
Code:echo " \"$unity\" = \"$valeur\" | $unity=$valeur;$WARN;$CRIT;0;$MAX "
Version imprimable
Tu veux probablement ça :
Code:echo " \"$unity\" = \"$valeur\" | $unity=$valeur;$WARN;$CRIT;0;$MAX "
Non la commande me renvoie plus ou moins la même chose :?
Je suppose que le problème provient avant le pipe mais même en isolent les variables cela ne change rienCode:
1
2
3
4
5
6
7
8
9 + printf -vvar1 %.2f 10,219999 ++ echo 10,22 ++ sed 's/\,/./g' + valeur=10.22 ++ echo '10.22 > 10' ++ bc -l + (( 1 )) =10.22;5;10;0;25 'ees-celsius =10.22;5;10;0;25 rees-celsius
Code:\"$unity\" = \"$valeur\" |
Plus ou moins ??
Que renvoie cette commande ? Es-tu sûr de bien retranscrire exactement la ligne de commande qui est effectivement dans ton script ? Un "|" n'est pas interprété par le shell s'il est entre double-quotes, ce qui est le cas dans ce que tu as posté.
Peux-tu mettre le résultat du set -x avec cette commande (echo ...) ?
J'ai fais un c/c de ta commande.
Pour y voir plus clair, voici le script :
Et voici le résultat du script :Code:
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 #!/bin/bash #Connexion à la à l'automate export BACNET_BBMD_ADDRESS=X.X.X.X #Arguments while getopts A:B:C:D:E:F:hV OPT do case $OPT in A) AUTOMATE=$OPTARG ;; B) OBJECT=$OPTARG ;; C) IDENTIFIER=$OPTARG ;; D) WARN=$OPTARG ;; E) CRIT=$OPTARG ;; F) MAX=$OPTARG ;; h) print_help exit $STATE_UNKNOWN ;; V) print_version exit $STATE_UNKNOWN ;; esac done #On va chercher la valeur val=$(/tmp/bacnet-stack-0.8.3/bin/bacrp $AUTOMATE $OBJECT $IDENTIFIER 85 | sed 's/\r//; s/\./,/') unity=$( ./bacrp $AUTOMATE $OBJECT $IDENTIFIER 117) #Traitement de la valeur printf -vvar1 "%.2f" $val valeur=$(echo $var1 | sed "s/\,/./g") #Condition if (( $(echo "$valeur > $CRIT" | bc -l) ));then echo " \"$unity\" = \"$valeur\" | $unity=$valeur;$WARN;$CRIT;0;$MAX " elif (( $(echo "$valeur >= $WARN" | bc -l) ));then echo "Warning - valeur=$valeur - warning=$WARN - critical=$CRIT" else echo "OK - valeur=$valeur - warning=$WARN" fi
Code:
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 bash -x check_siemens.sh -A 2098179 -B 0 -C 2 -D 5 -E 10 -F 25 + export BACNET_BBMD_ADDRESS=X.X.X.X + BACNET_BBMD_ADDRESS=X.X.X.X + getopts A:B:C:D:E:F:hV OPT + case $OPT in + AUTOMATE=2098179 + getopts A:B:C:D:E:F:hV OPT + case $OPT in + OBJECT=0 + getopts A:B:C:D:E:F:hV OPT + case $OPT in + IDENTIFIER=2 + getopts A:B:C:D:E:F:hV OPT + case $OPT in + WARN=5 + getopts A:B:C:D:E:F:hV OPT + case $OPT in + CRIT=10 + getopts A:B:C:D:E:F:hV OPT + case $OPT in + MAX=25 + getopts A:B:C:D:E:F:hV OPT ++ /tmp/bacnet-stack-0.8.3/bin/bacrp 2098179 0 2 85 Registering with BBMD at X.X.X.X:47808 for 60000 seconds ++ sed 's/\r//; s/\./,/' + val=10,450000 ++ ./bacrp 2098179 0 2 117 Registering with BBMD at X.X.X.X:47808 for 60000 seconds + unity=$'degrees-celsius\r' + printf -vvar1 %.2f 10,450000 ++ sed 's/\,/./g' ++ echo 10,45 + valeur=10.45 ++ echo '10.45 > 10' ++ bc -l + (( 1 )) =10.45;5;10;0;25 'ees-celsius =10.45;5;10;0;25 rees-celsius
EDIT : Et ce qui est le plus bizarre c'est quand je mets :
J'obtiens :Code:
1
2
3
4 if (( $(echo "$valeur > $CRIT" | bc -l) ));then echo " Unité = $unity " echo " Valeur = $valeur " echo " "$unity" = "$valeur" "
Code:
1
2
3
4
5
6
7
8
9 ++ echo '9.90 > 7' ++ bc -l + (( 1 )) 'echo ' Unité = degrees-celsius Unité = degrees-celsius + echo ' Valeur = 9.90 ' Valeur = 9.90 = 9.90 'degrees-celsius = 9.90 -celsius
Il y a un retour-chariot (\n) à la fin de la valeur de la variable unity.
Effectivement...
Depuis le début c'est ce retour chariot qui me gène :roll:
En tout cas un grand merci à vous pour votre aide !!