logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).


L'icône rouge permet de télécharger chaque page du wiki visitée au format PDF et la grise au format ODT → ODT PDF Export

Ceci est une ancienne révision du document !


Bash : les symboles dans les calculs

Page en court de réécriture

Introduction

Dans la page précédente (Les opérateurs de comparaison numérique), nous avons abordé la commande interne let et la commande composée ((...)).
Nous complémentons ici leurs usages, pour réaliser des opérations mathématiques.

Les commandes let et ((...)) sont les seules commandes internes que bash dispose pour réaliser des opérations mathématiques.
A travers elles, bash est limité à opérer que sur des entiers signés (positifs ou négatifs).
Le résultat de l'évaluation d'une expression sera toujours un entier décimal signé.

Pour réaliser des opérations avec des nombres à virgule ou plus complexes, nous devons nous tourner vers des commandes externes tel que bc (non installé par défaut) ou awk. Ou alors utiliser d'autres langages interprétés tel que perl, python, etc (awk, perl et python sont disponibles par défaut sur les systèmes Debian).

Avec let et ((...)), la plage numérique autorisée est : -9223372036854775808 < 0 > 9223372036854775807

Après l'évaluation des expressions qu'elles contiennent, let et ((...)) renvoient le code de retour :

  • 0, si le résultat est inférieur ou supérieur à 0.
  • 1, si le résultat est égale à 0.

La commande ((...)) peut-être préfixée du caractère de remplacement $ pour former la commande $((...)), afin d’être remplacée par l'évaluation de l’expression qu'elle contient.

La commande $[…] équivalente à la commande $((..)) ne doit plus être utilisée.

Elle est délaissée depuis la version 2.0 de bash au profit de ((...)).

Pour des raisons de rétrocompatibilités, elle est toujours active dans nos bash modernes.
Mais n'est plus documentée dans la page du manuel.

Viendra un jour où, $[…] ne sera plus.

Les systèmes numériques

Les expressions numériques évaluées par let et ((...)) peuvent contenir des nombres de différent système numérique.

L'évaluation des expression (le résultat) sera toujours retourné en entier décimal.

  • Sans précision les nombres sont en base 10 (décimal).
  • Préfixé d'un 0, le nombre est un octal (base 8).
  • Préfixé de 0x (ou 0X), le nombre est un hexadécimal (base 16).

Si non, la syntaxe suivante peut-être utilisée :

  • [base#]n

Avec :

  • base#base est un nombre en décimal désignant la base utilisée (de 2 à 64).
  • n Le nombre lui même :
    • Jusqu'à la base 10, le nombre contient que des chiffres.
    • De la base 11 à la base 36, les lettres minuscules ou majuscules peuvent être utilisées indifféremment.
    • De la base 37 à la base 64, les lettres minuscules, majuscules, @ et _ sont à utiliser dans cet ordre.

Les opérateurs arithmétiques

Les opérateurs arithmétiques permettent de réaliser des calculs numériques classiques.

Les opérateurs arithmétiques
Opérateurs Désignations Résultats
Opérateurs unaires
+ expr Signe positif Valeur de expr
- expr Signe négatif Opposé de expr
Opérateurs binaires
expr1 + expr2 Addition expr2 ajouté à expr1
expr1 - expr2 Soustraction expr2 retiré de expr1
expr1 * expr2 Multiplication expr1 multiplié par par expr2
expr1 / expr2 Division expr1 divisé par expr2
expr1 % expr2 Modulo Reste de la division de expr1 par expr2
expr1 ** expr2 Puissance expr1 multiplié par lui-même expr2 fois

Opérateurs d'affectation arithmétique

opérateurs opérations
= affectation arithmétique
+= incrémentation
-= décrémentation
/= affectation par division
+= affectation par multiplication
%= afectation du reste

Voir :

Opérateurs binaires

Ces opérateurs s'utilisent sur des binaires, (sur des 1 et des zéro).

Opérateurs significations
« décalage d'un bit à gauche (=mutiplication par deux)
» décalage d'un bit à droite (=division par deux)
&< “et” logique (ex : on a une variable=1; si on fait &1 cela fait 1 (en binaire 1 et 1 = 1)
|< ou (inclusif) binaire
~ non binaire
^ XOR (ou exclusif) binaire
Le &< ( “et” binaire), le |< (“ou” binaire), et le ~ (“non” binaire)
peuvent aussi être remplacés (de façon équivalente) par les opérateurs logiques que l'on a vus au sujet de la composition de commandes sur erreur ou sur réussite.
&& : exécution de la commande suivante si, et seulement si la précédente renvoie 0

|| : exécution de la commande suivante si, et seulement si la précédente renvoie autre chose que 0

! : inverse du retour d'une commande, c'est à dire un “non” logique

^_^

Écriture utile pour les boucles

Post-incrémentation et pré-incrémentation :

script
#!/bin/bash
declare -i x=20 y  # ici les signes = permettent une affection
(( y = x++ ))      # d'abord la valeur de x est conservée dans la valeur de y (donc $y= 20) puis la valeur 
                   #  de x est incrémentée ($x est donc égal à 21)
                   # les espaces autour du signe = ne sont pas obligatoires
echo "y=$y x=$x"   # réponse : y=20 x=21
script
#!/bin/bash
declare -i x=20 y
(( y = ++x ))      # d'abord la valeur de x est incrémentée puis la valeur de y reçoit 
                   # la valeur du x incrémenté
                   # les espaces autour du signe = ne sont pas obligatoires
echo "y=$y x=$x"   # réponse : y=21 x=21

Post-décrémentation et pré-décrémentation :

script
#!/bin/bash
declare -i x=20 y
(( y = x-- ))      # d'abord la valeur de x est conservée dans la valeur de y (donc $y= 20) 
                   # puis la valeur de x est décrémentée ($x est donc égal à 19)
                   # les espaces autour du signe = ne sont pas obligatoires   
echo "y=$y x=$x"   # réponse : y=20 x=19
script
#!/bin/bash
declare -i x=20 y
(( y = --x ))           # d'abord la valeur de x est décrémentée ($x=19), puis la valeur de y 
                        # reçoit la valeur du x incrémenté (donc $y=19)
                        # les espaces autour du signe = ne sont pas obligatoires
echo "y=$y x=$x"        # réponse : y=19 x=19
En bref,
Post-incrémentation/décrémentation : Les signes d'incrémentation (++) ou de décrémentation (--) sont placés après une valeur à incrémentée (+1) ou à décrémenter (-1) ; cette valeur est conservée dans “y” puis elle est incrémentée (+1) ou décrémentée (-1).

Pré-incrémentation/décrémentation : Les signes d'incrémentation (++) ou de décrémentation (--) sont placés avant une valeur à incrémentée ou à décrémenter ; cette valeur est incrémentée (+1) ou décrémentée (-1) puis elle est conservée dans “y”.

Tuto précédent

La suite, c'est ici

1)
N'hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !
doc/programmation/shells/page-man-bash-iv-symboles-dans-les-calculs-mathematiques.1677293218.txt.gz · Dernière modification: 25/02/2023 03:46 par agp91

Pied de page des forums

Propulsé par FluxBB