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 →
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente Prochaine révision Les deux révisions suivantes | ||
doc:programmation:shells:page-man-bash-iv-symboles-dans-les-calculs-mathematiques [22/10/2015 18:15] milou [Écriture utile pour les boucles] |
doc:programmation:shells:page-man-bash-iv-symboles-dans-les-calculs-mathematiques [25/02/2023 03:45] agp91 [Opérateurs arithmétiques] |
||
---|---|---|---|
Ligne 5: | Ligne 5: | ||
* Commentaires : scripts | * Commentaires : scripts | ||
* Débutant, à savoir : [[:doc:systeme:commandes:le_debianiste_qui_papillonne|Utiliser GNU/Linux en ligne de commande, tout commence là !.]] :-) | * Débutant, à savoir : [[:doc:systeme:commandes:le_debianiste_qui_papillonne|Utiliser GNU/Linux en ligne de commande, tout commence là !.]] :-) | ||
- | * Suivi : | + | * Suivi : {{tag>en-chantier}} |
* Création par [[user>Hypathie]] le 08/04/2014 | * Création par [[user>Hypathie]] le 08/04/2014 | ||
* Testé par [[user>Hypathie]] Avril 2014 | * Testé par [[user>Hypathie]] Avril 2014 | ||
Ligne 20: | Ligne 20: | ||
* [[doc:programmation:shells:bash-vii-globs-etendus-regex| Bash : Variables, globs étendus, ERb, ERe]] | * [[doc:programmation:shells:bash-vii-globs-etendus-regex| Bash : Variables, globs étendus, ERb, ERe]] | ||
+ | <note important> | ||
+ | Page en court de réécriture | ||
+ | </note> | ||
+ | ===== Introduction ===== | ||
- | =====Opérateurs arithmétiques ===== | + | Dans la page précédente ([[doc:programmation:shells:page-man-bash-iii-les-operateurs-de-comparaison-numerique|Les opérateurs de comparaison numérique]]), nous avons abordé la commande interne **let** et la commande composée **<nowiki>((...))</nowiki>**.\\ |
+ | Nous complémentons ici leurs usages, pour réaliser des opérations mathématiques. | ||
- | ^opérateurs ^opérations ^ | + | Les commandes **let** et **<nowiki>((...))</nowiki>** sont les seules commandes internes que bash dispose pour réaliser des opérations mathématiques.\\ |
- | | ''<nowiki> +</nowiki> '' | addition | | + | A travers elles, bash est limité à opérer que sur des entiers signés (positifs ou négatifs).\\ |
- | | '' <nowiki>-</nowiki> '' | soustraction | | + | Le résultat de l'évaluation d'une expression sera toujours un entier décimal signé. |
- | | '' <nowiki>/</nowiki> '' | division (récup. le quotient) | | + | |
- | | '' <nowiki>%</nowiki> '' | modulo (récup. le reste) | | + | |
- | | '' <nowiki>* </nowiki>'' | multiplication | | + | |
- | | '' <nowiki>**</nowiki> '' | puissance (''bash 2.02 et sup.'') | | + | |
- | >Pour les calculs complexes bash n'est pas adapté, il faut utiliser le langage ''bc''. | + | 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 **<nowiki>((...))</nowiki>**, la plage numérique autorisée est : **-9223372036854775808 < 0 > 9223372036854775807** | ||
+ | |||
+ | Après l'évaluation des expressions qu'elles contiennent, **let** et **<nowiki>((...))</nowiki>** 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 **<nowiki>((...))</nowiki>** peut-être préfixée du caractère de remplacement **$** pour former la commande **<nowiki>$((...))</nowiki>**, afin d’être remplacée par l'évaluation de l’expression qu'elle contient. | ||
+ | |||
+ | <note warning> | ||
+ | La commande **$[...]** équivalente à la commande **<nowiki>$((..))</nowiki>** __**ne doit plus être utilisée**__.\\ | ||
+ | \\ | ||
+ | Elle est délaissée depuis la version 2.0 de bash au profit de **<nowiki>((...))</nowiki>**.\\ | ||
+ | \\ | ||
+ | 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. | ||
+ | </note> | ||
+ | |||
+ | ===== Les bases arithmétiques ===== | ||
+ | |||
+ | Les expressions numériques évaluées par **let** et **<nowiki>((...))</nowiki>** 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#** où **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// **''<nowiki>**</nowiki>''** //expr2//| Puissance | //expr1// multiplié par lui-même //expr2// fois | | ||
=====Opérateurs d'affectation arithmétique===== | =====Opérateurs d'affectation arithmétique===== |