#1 Le 15/04/2016, à 13:26
- tony44
Problème script bash - Comparaison de nombres décimaux
Bonjour à tous,
Je suis en stage et je dois faire un script pour superviser le load-average sur une machine Solaris.
Voici le script:
[img=script]Bibliothèques\Documents\Capture.PNG[/img]
Et voici l'erreur que j'ai
[img=erreur]Bibliothèques\Documents\Capture1.PNG[/img]
Je pense que c'est une erreur de type. Mais je n'arrive pas à la résoudre
Merci d'avance pour votre aide !!
Hors ligne
#2 Le 15/04/2016, à 13:47
- pingouinux
Re : Problème script bash - Comparaison de nombres décimaux
Bonjour,
Tes images sont locales à ton ordinateur, et donc pas visibles ici.
Fais plutôt un copier-coller du script et du message d'erreur (entre balises-code).
Hors ligne
#3 Le 15/04/2016, à 13:49
- Watael
Re : Problème script bash - Comparaison de nombres décimaux
salut,
une machine Solaris sous Ubuntu ???
il est préférable de faire un copier/coller, que d'afficher une capture d'écran (qui d'ailleurs ne s'affiche pas; si seulement vous aviez relu votre message)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#4 Le 15/04/2016, à 14:23
- Nasman
Re : Problème script bash - Comparaison de nombres décimaux
Et cela semble un chemin Windows
PC fixe sous Bionic 64 bits et portable avec Focal 64 bits
Hors ligne
#5 Le 18/04/2016, à 10:13
- tony44
Re : Problème script bash - Comparaison de nombres décimaux
Excusez-moi j'avais pourtant modifié le message car j'avais vu que les images ne fonctionnaient pas
Voici le script:
#!/bin/bash
#set -x
# Usage
if [ $# -lt 6 ]; then
echo "Usage: $0 <Load1_Warning> <Load5_Warning> <Load15_Warning> <Load1_Critical> <Load5_Critical> <Load15_Critical>"
exit 2
fi
# Filesystem threshold values
Load1_Warning=$1
Load5_Warning=$2
Load15_Warning=$3
Load1_Critical=$4
Load5_Critical=$5
Load15_Critical=$6
# On recupere les elements du resultat de la commande uptime qui nous interesse
Load1_use=$( top | grep "last" | awk {'print $6'} )
Load5_use=$( top | grep "last" | awk {'print $7'} )
Load15_use=$( top | grep "last" | awk {'print $8'} )
Load1_use_M=$( echo "${Load1_use%?}*100" | bc )
Load5_use_M=$( echo "${Load5_use%?}*100" | bc )
Load15_use_M=$( echo "${Load15_use%?}*100" | bc )
Load1_Warning_M=$( echo "${Load1_Warning}*100" | bc )
Load5_Warning_M=$( echo "${Load5_Warning}*100" | bc )
Load15_Warning_M=$( echo "${Load15_Warning}*100" | bc )
Load1_Critical_M=$( echo "${Load1_Critical}*100" | bc )
Load5_Critical_M=$( echo "${Load5_Critical}*100" | bc )
Load15_Critical_M=$( echo "${Load15_Critical}*100" | bc )
Load_use=( ${Load1_use_M} ${Load5_use_M} ${Load15_use_M} )
Load_Warning=( ${Load1_Warning_M} ${Load5_Warning_M} ${Load15_Warning_M} )
Load_Critical=( ${Load1_Critical_M} ${Load5_Critical_M} ${Load15_Critical_M} )
for i in 0 1 2
do
if [ ${Load_use[${i}]} -lt ${Load_Warning[${i}]} | bc ]; then
echo "Load average: ${Load1_use%?}, ${Load5_use%?}, ${Load15_use%?}|load1=${Load1_use%?} load5=${Load5_use%?} load15=${Load15_use%?} ";
exit 0
fi
done
for i in 0 1 2
do
if [ ${Load_use[${i}]} -ge ${Load_Critical[${i}]} | bc ]; then
echo "Load average Critical: ${Load1_use%?}, ${Load5_use%?}, ${Load15_use%?}|load1=${Load1_use%?} load5=${Load5_use%?} load15=${Load15_use%?} ";
exit 2
fi
done
for i in 0 1 2
do
if [ ${Load_use[${i}]} -ge ${Load_Warning[${i}]} | bc ]; then
echo "Load average Warning: ${Load1_use%?}, ${Load5_use%?}, ${Load15_use%?}|load1=${Load1_use%?} load5=${Load5_use%?} load15=${Load15_use%?} ";
exit 1
fi
done
Et voici l'erreur que j'ai
/scripts/nagios/check_test2: line 45: [: missing `]'
+ bc ']'
can't open input file ] on line 0, command line
Du coup, le script bloque et n'arrive pas à passer à la suite ..
Merci d'avance pour votre aide !!
Hors ligne
#6 Le 18/04/2016, à 10:51
- pingouinux
Re : Problème script bash - Comparaison de nombres décimaux
Bonjour,
Essaye de remplacer la ligne 45 par celle-ci
if (( $(bc <<<"${Load_use[$i]}<${Load_Warning[$i]}") )); then
Il y a d'autres lignes dans le même cas.
Hors ligne
#7 Le 18/04/2016, à 10:58
- MicP
Re : Problème script bash - Comparaison de nombres décimaux
Je ne comprends pas ce que tu as voulu faire avec " | bc" dans tes tests "if", je pense qu'il doit s'agir d'une erreur de copié/collé.
Je verrai plutôt la ligne 45 (et les if suivants) comme ça :
if [ ${Load_use[${i}]} -lt ${Load_Warning[${i}]} ]; then
Hors ligne
#8 Le 18/04/2016, à 12:42
- tony44
Re : Problème script bash - Comparaison de nombres décimaux
Merci pour vos réponses j'ai essayé de modifier mes lignes de if avec celle proposé par Pingouinux.
Je n'ai plus le même message d'erreur mais maintenant j'ai ça:
+ for i in 0 1 2
++ bc
syntax error on line 1, teletype
+ (( ))
+ for i in 0 1 2
++ bc
syntax error on line 1, teletype
+ (( ))
+ for i in 0 1 2
++ bc
syntax error on line 1, teletype
+ (( ))
+ for i in 0 1 2
++ bc
syntax error on line 1, teletype
+ (( ))
+ for i in 0 1 2
++ bc
syntax error on line 1, teletype
+ (( ))
+ for i in 0 1 2
++ bc
syntax error on line 1, teletype
+ (( ))
+ for i in 0 1 2
++ bc
syntax error on line 1, teletype
+ (( ))
+ for i in 0 1 2
++ bc
syntax error on line 1, teletype
+ (( ))
+ for i in 0 1 2
++ bc
syntax error on line 1, teletype
+ (( ))
Hors ligne
#9 Le 18/04/2016, à 12:45
- tony44
Re : Problème script bash - Comparaison de nombres décimaux
J'ai utilisé la commande bc car Bash n'arrive pas à comparer des réels donc si je fais le code que indique MicP je vais avoir une erreur comme quoi les deux nombres ne sont pas du même format.
Hors ligne
#10 Le 18/04/2016, à 13:41
- MicP
Re : Problème script bash - Comparaison de nombres décimaux
Ah oui, j'avais oublié que tu voulais calculer sur des nombres décimaux => bc obligé
Essaye avec ça pour voir :
if [[ $(echo "${Load_use[${i}]} - ${Load_Warning[${i}]}" | bc) != 0 ]]; then
EDIT : Zut, c'est pas finit : Tu voulais aussi comparer avec supérieur ou égal…Donc ça va pas…
Dernière modification par MicP (Le 18/04/2016, à 14:22)
Hors ligne
#11 Le 18/04/2016, à 13:55
- tony44
Re : Problème script bash - Comparaison de nombres décimaux
Pareil ça me met la même erreur que précédemment ..
Hors ligne
#12 Le 18/04/2016, à 14:23
- MicP
Re : Problème script bash - Comparaison de nombres décimaux
Merci pour le retour.
(j'avais commencé à éditer mon message car je m'en suis aussi rendu compte, mais j'ai du répondre au téléphone.)
Hors ligne
#13 Le 18/04/2016, à 14:27
- claudius01
Re : Problème script bash - Comparaison de nombres décimaux
Bonjour,
Ah oui, j'avais oublié que tu voulais calculer sur des nombres décimaux => bc obligé
En voilà une affirmation gratuite ?!..
Cf. bash comparaison nombres decimaux et awk comparaison nombres decimaux (en autres ;-)
Dernière modification par claudius01 (Le 18/04/2016, à 14:29)
Hors ligne
#14 Le 18/04/2016, à 16:18
- pingouinux
Re : Problème script bash - Comparaison de nombres décimaux
@tony44 @8 :
Es-tu bien en bash ?
L'espace en tête de la première ligne du script que tu montres en #5 ne devrait pas s'y trouver. Est-ce une erreur de copier-coller, ou est-ce ainsi dans le script ?
Comment as-tu lancé le script ?
Hors ligne
#15 Le 18/04/2016, à 16:54
- compte banni et supprimé
Re : Problème script bash - Comparaison de nombres décimaux
Bonjour,
J'ai eut ce genre de problème hier
Je ne sais pas pourquoi mais certains espaces ne sont considéré comme des espaces et on se retrouve avec ce genre d'erreur
La solution est de d'aller à chaque espace, le supprimer et le refaire en appuyant sur la touche espace et ce à chaque espace de chaque ligne
j'ai énormément galéré pour arriver à trouver ça, une prise de tête
Et comme je suis d'un naturel têtu, je n'ai pas lâché prise
#16 Le 18/04/2016, à 17:47
- pingouinux
Re : Problème script bash - Comparaison de nombres décimaux
Je ne sais pas pourquoi mais certains espaces ne sont considéré comme des espaces et on se retrouve avec ce genre d'erreur
Pour voir ce qu'il en est
hd fichier
et tu montres la sortie correspondant aux lignes concernées.
Je ne pense pas que le problème de tony44 soit dû à ça.
Hors ligne
#17 Le 18/04/2016, à 18:52
- MicP
Re : Problème script bash - Comparaison de nombres décimaux
En voilà une affirmation gratuite ?!..
Dans le deuxième lien que tu cite, on utilise awk, ce n'est donc pas l'interpréteur bash qui va faire le calcul,
et regarde dans le premier lien, on trouve tout en bas : "…Bash ne gère que les entiers. …" ;-)
Hors ligne