Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 04/02/2022, à 13:26

MDBeaver

Calculs dans un script bash avec des variables [résolu]

Bonjour à tous,
Je me vois encore obligé de faire appel à votre savoir.
Je travaille sous bash (version 5) sur un Mac.
Je dois calculer le pourcentage de pages restant à partir de deux variables que je récupère via SNMP. Quelle que ce soit la méthode utilisée (bc, printf, awk...) lorsque j'essaie directement dans le terminal cela fonctionne mais dès que je copie-colle ma fonction dans mon script, j'ai soit des messages d'erreur soit pas de calcul.

extrait de mon script :

restant_y=1260   # en réalité cette valeur est récupérée par un snmpwalk
total_y=6000       # en réalité cette valeur est récupérée par un snmpwalk

result=$(expr \( $restant_y \* 100 \) / $total_y)
echo $result

ce qui me donne dans le terminal :

MacBook-Pro:~ user$ restant_y=1260
MacBook-Pro:~ user$ total_y=6000
MacBook-Pro:~ user$ result=$(expr \( $restant_y \* 100 \) / $total_y)
MacBook-Pro:~ user$ echo $result
21

et en lançant le script :

expr: syntax error

Quelqu'un aurait-il une solution pour m'aider. Merci d'avance

Dernière modification par MDBeaver (Le 04/02/2022, à 16:41)

Hors ligne

#2 Le 04/02/2022, à 13:38

Nuliel

Re : Calculs dans un script bash avec des variables [résolu]

Bonjour,
Si tu veux un résultat entier, tu peux faire un truc du genre

nuliel@nuliel-Latitude-E7270:~$ restant_y=1260
nuliel@nuliel-Latitude-E7270:~$ total_y=6000
nuliel@nuliel-Latitude-E7270:~$ result=$((restant_y*100/total_y))
nuliel@nuliel-Latitude-E7270:~$ echo $result
21

Sinon ça peut se faire avec bc (il faut juste penser à fixer la précision avant de faire le calcul)

Hors ligne

#3 Le 04/02/2022, à 13:57

Watael

Re : Calculs dans un script bash avec des variables [résolu]

avant d'afficher le résultat, sinon le calcul se fait sur des arrondis. hmm
smile


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#4 Le 04/02/2022, à 14:14

Compte supprimé

Re : Calculs dans un script bash avec des variables [résolu]

Bonjour,
Vous ne répondez pas à la question hmm

#5 Le 04/02/2022, à 14:16

MDBeaver

Re : Calculs dans un script bash avec des variables [résolu]

Nuliel a écrit :

Bonjour,
Si tu veux un résultat entier, tu peux faire un truc du genre

nuliel@nuliel-Latitude-E7270:~$ restant_y=1260
nuliel@nuliel-Latitude-E7270:~$ total_y=6000
nuliel@nuliel-Latitude-E7270:~$ result=$((restant_y*100/total_y))
nuliel@nuliel-Latitude-E7270:~$ echo $result
21

Sinon ça peut se faire avec bc (il faut juste penser à fixer la précision avant de faire le calcul)

Merci pour ta réponse rapide
j'avais déjà essayé et j'obtiens ce message d'erreur en le lançant depuis le script :

./comm_snmp.sh: ligne 57: restant_y*100/total_y : division par 0 (le symbole erroné est « total_y »)

même problème avec bc....

Hors ligne

#6 Le 04/02/2022, à 14:36

Compte supprimé

Re : Calculs dans un script bash avec des variables [résolu]

Tu évoques l'utilisation de SNMP... Je n'ai aucune connaissance sur ce protocole et j'ignore ce que cela implique. Comment lances-tu ton script exactement?

#7 Le 04/02/2022, à 15:05

iznobe

Re : Calculs dans un script bash avec des variables [résolu]

Bonjour , d ' apres le message , ca ne parait pas etre une erreur dans cette ligne :

./comm_snmp.sh: ligne 57: restant_y*100/total_y : division par 0 (le symbole erroné est « total_y »)

ca a plutot l' air d' etre que la valeur de " total_y" vaut 0 .

pour en etre sur , je ferais un truc du genre e, pseudo code :
"si total_y est different de 0 alors ..... "
genre ca , mais ca ne marchera certainement pas c ' est juste pour l ' idée :

if ($total_y != 0) echo"result=($( $restant_y *100/$total_y)): echo " division par 0 interdit , impossible de calculer ."

une fois que ca affiche bien les bon resultats , tu peux implementer la ligne dans ton code et arrondir a l' entier .

Dernière modification par iznobe (Le 04/02/2022, à 15:07)


retour utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#8 Le 04/02/2022, à 15:33

Compte supprimé

Re : Calculs dans un script bash avec des variables [résolu]

Le premier script fonctionne, j'imagine que le souci est lié au fait que le script n'est pas exécuté par un interprétateur bash... d'où ma question préalable

#9 Le 04/02/2022, à 15:50

erresse

Re : Calculs dans un script bash avec des variables [résolu]

MPython Alaplancha a écrit :

Le premier script fonctionne, j'imagine que le souci est lié au fait que le script n'est pas exécuté par un interprétateur bash... d'où ma question préalable

D'accord avec ça, ou alors, le problème vient du fait que le script ne récupère pas la valeur de $total_y, et la division par 0 entraîne l'erreur...


Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois résolu, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.

Hors ligne

#10 Le 04/02/2022, à 16:38

MDBeaver

Re : Calculs dans un script bash avec des variables [résolu]

erresse a écrit :
MPython Alaplancha a écrit :

Le premier script fonctionne, j'imagine que le souci est lié au fait que le script n'est pas exécuté par un interprétateur bash... d'où ma question préalable

D'accord avec ça, ou alors, le problème vient du fait que le script ne récupère pas la valeur de $total_y, et la division par 0 entraîne l'erreur...

le script est bien exécuté par un interpréter bash - en fait ce matin cela a fonctionné et quand j'ai voulu ajouter les 3 autres couleurs je ne sais pas ce qui c'est passé mais une option dans ma commande snmpwalk est passée de "-Le" à "-LE" donc les valeurs de total_y et de restant_y n'étaient pas récupérées.

Merci à toi erresse de m'avoir mis le doigt sur mon erreur que je n'arrivais pas à voir car je n'ai pas intentionnellement changé cette option !!

Désolé du dérangement et encore une fois merci de votre aide

Hors ligne