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 [26/02/2023 11:15] agp91 [Les opérateurs d'affectation] |
doc:programmation:shells:page-man-bash-iv-symboles-dans-les-calculs-mathematiques [26/02/2023 12:46] ubub [Les opérateurs logiques] |
||
---|---|---|---|
Ligne 17: | Ligne 17: | ||
* ;-) | * ;-) | ||
* [[doc:programmation:shells:page-man-bash-v-les-tableaux|Les tableaux]] | * [[doc:programmation:shells:page-man-bash-v-les-tableaux|Les tableaux]] | ||
- | * [[doc:programmation:shells:man-bash-vi-les-caracteres-de-transformation-de-parametres|Les caractères de transformation de parametres]] | + | * [[doc:programmation:shells:man-bash-vi-les-caracteres-de-transformation-de-parametres|Les caractères de transformation de paramètres]] |
* [[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]] | ||
Ligne 32: | Ligne 32: | ||
Le résultat de l'évaluation d'une expression sera toujours un entier décimal signé. | 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). | + | 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** | Avec **let** et **<nowiki>((...))</nowiki>**, la plage numérique autorisée est : **-9223372036854775808 < 0 > 9223372036854775807** | ||
Ligne 39: | Ligne 39: | ||
* **0**, si le résultat est inférieur ou supérieur à 0. | * **0**, si le résultat est inférieur ou supérieur à 0. | ||
- | * **1**, si le résultat est égale à 0. | + | * **1**, si le résultat est égal à 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. | 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. | ||
Ligne 59: | Ligne 59: | ||
===== Les systèmes numériques ===== | ===== Les systèmes numériques ===== | ||
- | Les expressions numériques évaluées par **let** et **<nowiki>((...))</nowiki>** peuvent contenir des nombres de différent système numérique.\\ | + | Les expressions numériques évaluées par **let** et **<nowiki>((...))</nowiki>** peuvent contenir des nombres de différents systèmes numérique.\\ |
L'évaluation des expression (le résultat) sera toujours retourné en entier décimal. | L'évaluation des expression (le résultat) sera toujours retourné en entier décimal. | ||
Ligne 116: | Ligne 116: | ||
a=42 a^2=1764 | a=42 a^2=1764 | ||
</code> | </code> | ||
+ | |||
+ | <note important> | ||
+ | La division par 0 retourne une erreur.\\ | ||
+ | \\ | ||
+ | <code user> | ||
+ | echo $((42/0)) | ||
+ | </code><code> | ||
+ | bash: 42/0 : division par 0 (le symbole erroné est « 0 ») | ||
+ | </code> | ||
+ | </note> | ||
+ | |||
===== Les opérateurs d'affectation ===== | ===== Les opérateurs d'affectation ===== | ||
Ligne 210: | Ligne 221: | ||
Les opérateurs logiques, réalisent des opérations sur des booléens.\\ | Les opérateurs logiques, réalisent des opérations sur des booléens.\\ | ||
- | L'algèbre de boole énumère que deux états : **vrai** et **faux**.\\ | + | L'algèbre de boole n'énumère que deux états : **vrai** et **faux**.\\ |
Les commandes **let** et **<nowiki>((..))</nowiki>** suivent le standard C : | Les commandes **let** et **<nowiki>((..))</nowiki>** suivent le standard C : | ||
* **0** est compris comme **faux**. | * **0** est compris comme **faux**. | ||
- | * Tout autres valeurs (positive ou négatives), souvent **1**, sont comprise comme **vrai**. | + | * Toutes autres valeurs (positives ou négatives), souvent **1**, sont comprises comme **vrai**. |
... Dans bash, c'est le contraire (voir la note plus bas). | ... Dans bash, c'est le contraire (voir la note plus bas). | ||
Ligne 257: | Ligne 268: | ||
</code> | </code> | ||
- | Les opérateurs **<nowiki>&&</nowiki>** et **<nowiki>||</nowiki>**, étudient l'opérande de droite (//expr2//) que si cela est pertinent : | + | Les opérateurs **<nowiki>&&</nowiki>** et **<nowiki>||</nowiki>** n'étudient l'opérande de droite (//expr2//) que si cela est pertinent : |
<code user> | <code user> | ||
Ligne 274: | Ligne 285: | ||
<note>Nous avons placé l'affection **a=10** entre parenthèses **(a=10)**, pour la protéger contre la priorité des opérateurs.\\ | <note>Nous avons placé l'affection **a=10** entre parenthèses **(a=10)**, pour la protéger contre la priorité des opérateurs.\\ | ||
\\ | \\ | ||
- | Si non, l'opérateur **<nowiki>&&</nowiki>** étant prioritaire à l'opérateur d'affectation **=**, les opérations effectuées deviennent **<nowiki>0 && a</nowiki>**, puis **=10**, ce qui génère une erreur. | + | Sinon, l'opérateur **<nowiki>&&</nowiki>** étant prioritaire à l'opérateur d'affectation **=**, les opérations effectuées deviennent **<nowiki>0 && a</nowiki>**, puis **=10**, ce qui génère une erreur. |
\\ | \\ | ||
<code user> | <code user> | ||
Ligne 282: | Ligne 293: | ||
</code> | </code> | ||
- | Voir plus bas [[doc:programmation:shells:page-man-bash-iv-symboles-dans-les-calculs-mathematiques#priorites-des-operateurs|les priorités des opérateurs]]. | + | Voir plus bas [[doc:programmation:shells:page-man-bash-iv-symboles-dans-les-calculs-mathematiques#priorités-des-operateurs|les priorités des opérateurs]]. |
</note> | </note> | ||
- | S'il n'est pas pertinent d'étudier l'opérande de droite et qu'il existe d'autre opérateurs, alors les opérations se poursuives. | + | S'il n'est pas pertinent d'étudier l'opérande de droite et qu'il existe d'autres opérateurs, alors les opérations se poursuivent. |
<code user> | <code user> | ||
a=0 | a=0 | ||
- | echo $((a && (a=10) || (a=20) )) a=$a # Avec a=0 (faux) et l'opérateur && il n'est pertinent d'étudier le second opérande | + | echo $((a && (a=10) || (a=20) )) a=$a # Avec a=0 (faux) et l'opérateur &&, il n'est pas pertinent d'étudier le second opérande |
# L'opération se reporte sur l'opérateur ||, étant pertinent, son opérande de droite est étudié. | # L'opération se reporte sur l'opérateur ||, étant pertinent, son opérande de droite est étudié. | ||
a=1 | a=1 | ||
Ligne 300: | Ligne 311: | ||
<note important> | <note important> | ||
- | Le opération logiques retournent une valeur booléenne.\\ | + | Les opérations logiques retournent une valeur booléenne.\\ |
\\ | \\ | ||
- | Les commandes **let** et **<nowiki>((..))</nowiki>** suivant le standard C.\\ | + | Les commandes **let** et **<nowiki>((..))</nowiki>** suivent le standard C.\\ |
Elles numérisent **faux** avec **0** et **vrai** avec une valeur **non nulle**.\\ | Elles numérisent **faux** avec **0** et **vrai** avec une valeur **non nulle**.\\ | ||
\\ | \\ |