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 →
Ceci est une ancienne révision du document !
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, il faut 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 expression qu'elles contiennent, let et ((...)) renvoient le code de retour :
La commande ((...)) peut-être préfixée du caractère de remplacement $ pour former la commande $((...)), afin d’être remplacer par l'évaluation de l’expression qu'elle contient.
opérateurs | opérations |
---|---|
+ | addition |
- | soustraction |
/ | division (récup. le quotient) |
% | modulo (récup. le reste) |
* | multiplication |
** | puissance (bash 2.02 et sup. ) |
Pour les calculs complexes bash n'est pas adapté, il faut utiliser le langagebc
.
opérateurs | opérations |
---|---|
= | affectation arithmétique |
+= | incrémentation |
-= | décrémentation |
/= | affectation par division |
+= | affectation par multiplication |
%= | afectation du reste |
Voir :
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 |
&<
( “et” binaire), le |<
(“ou” binaire), et le ~
(“non” binaire)&&
: 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
#!/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
#!/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
#!/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
#!/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
++
) 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”.