Tu veux probablement ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part echo " \"$unity\" = \"$valeur\" | $unity=$valeur;$WARN;$CRIT;0;$MAX "
Tu veux probablement ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part 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 rien
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part \"$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 : 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 #!/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 : 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 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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 if (( $(echo "$valeur > $CRIT" | bc -l) ));then echo " Unité = $unity " echo " Valeur = $valeur " echo " "$unity" = "$valeur" "
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
En tout cas un grand merci à vous pour votre aide !!
Partager