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

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

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 10:47]
agp91 [Introduction]
doc:programmation:shells:page-man-bash-iv-symboles-dans-les-calculs-mathematiques [26/02/2023 16:37]
ubub [Introduction]
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 29: Ligne 29:
  
 Les commandes **let** et **<​nowiki>​((...))</​nowiki>​** sont les seules commandes internes que bash dispose pour réaliser des opérations mathématiques.\\ ​ Les commandes **let** et **<​nowiki>​((...))</​nowiki>​** 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).\\ ​+A travers elles, bash est limité à n'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é. 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 53: Ligne 53:
 </​file>​ </​file>​
 \\  ​ \\  ​
-Pour des raisons de rétrocompatibilités, elle est toujours active dans nos bash modernes.\\ ​+Pour des raisons de rétrocompatibilité, elle est toujours active dans nos bash modernes.\\ ​
 Mais viendra un jour où, **$[...]** ne sera plus. Mais viendra un jour où, **$[...]** ne sera plus.
 </​note>​ </​note>​
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 121: Ligne 132:
  
 |  Liste des opérateurs d'​affectation ​ ||| |  Liste des opérateurs d'​affectation ​ |||
-^  Opérateurs ​ ^  Désignations ​ ^ Résultats ​ ^+^  Opérateurs ​ ^  Désignations ​ ^  Résultats ​ ^
 | Opérateurs unaires ||| | Opérateurs unaires |||
-| **''​++''​** //var// Ré-affectation ​par la pré-incrémentation à 1 | //​var// ​ = //var// + 1 puis retourne //var// | + **''​++''​** //​var// ​   ​Affectation ​par la pré-incrémentation à 1    //​var// ​ = //var// + 1 puis retourne //​var// ​ 
-| //var// **''​++''​** Ré-affectation ​par la post-incrémentation à 1 | Retourne //var//, puis //​var// ​ = //var// + 1 | + //var// **''​++''​** ​   ​Affectation ​par la post-incrémentation à 1   ​ Retourne //var//, puis //​var// ​ = //var// + 1  
-| **''​--''​** //var// Ré-affectation ​par la pré-décrémentation à 1 | //​var// ​ = //var// - 1 puis retourne //var// | + **''​--''​** //​var// ​   ​Affectation ​par la pré-décrémentation à 1    //​var// ​ = //var// - 1 puis retourne //​var// ​ 
-| //var// **''​--''​** Ré-affectation ​par la post-décrémentation à 1 | Retourne //var//, puis //​var// ​ = //var// - 1 |+ //var// **''​--''​** ​   ​Affectation ​par la post-décrémentation à 1   ​ Retourne //var//, puis //​var// ​ = //var// - 1   |
 | Opérateurs binaires ||| | Opérateurs binaires |||
-| //var// **''​=''​** //expr// | Simple affectation | Affecte //epxr// à la variable //var//| + //var// **''​=''​** //​expr// ​   Simple affectation ​   Affecte //epxr// à la variable //​var// ​    
-| //var// **''​+=''​** //​expr//​ | ​Ré-affectation ​par l'​incrémentation | //var// = //var// + //expr// + //var// **''​+=''​** //​expr// ​  ​Affectation ​par l'​incrémentation ​   //var// = //var// + //​expr// ​ 
-| //var// **''​-=''​** //​expr//​ | ​Ré-affectation ​par la décrémentation | //var// = //var// - //expr// |  + //var// **''​-=''​** //​expr// ​  ​Affectation ​par la décrémentation ​   //var// = //var// - //​expr// ​  |  
-| //var// **''​*=''​** //​expr//​ | ​Ré-affectation ​par la multiplication | //var// = //var// * //expr// + //var// **''​*=''​** //​expr// ​  ​Affectation ​par la multiplication ​   //var// = //var// * //​expr// ​ 
-| //var// **''/​=''​** //​expr//​ | ​Ré-affectation ​par la division | //var// = //var// / //expr// + //var// **''/​=''​** //​expr// ​  ​Affectation ​par la division ​   //var// = //var// / //​expr// ​ 
-| //var// **''​%=''​** //expr// | Ré-affectation par modulo | //var// = //​var// ​//expr// |+ //var// **''​%=''​** //​expr// ​  ​Affectation par modulo ​ |  //var// = //var// % //​expr// ​ | 
 +|  //var// **''<​nowiki><<​=</​nowiki>''​** //​expr// ​ |  ​Ré-affectation par le décalage\\ bit-à-bit à gauche  ​ //var// = //​var// ​<​nowiki><<</​nowiki>​ //​expr// ​ | 
 +|  //var// **''<​nowiki>>>​=</​nowiki>''​** //​expr// ​ |  Ré-affectation par le décalage\\ bit-à-bit à droite ​ |  //var// = //var// <​nowiki>>></​nowiki>​ //​expr// ​   | 
 +|  //var// **''&​=''​** //​expr// ​ |  Affectation par le ET binaire ​ |  //var// = //var// <​nowiki>&</​nowiki>​ //​expr// ​ | 
 +|  //var// **''​|=''​** //​expr// ​ |  Affectation par le OU binaire ​ |  //var// = //var// <​nowiki>​|</​nowiki>​ //​expr// ​ | 
 +|  //var// **''​^=''​** //​expr// ​ |  Affectation par le OU exclusif binaire ​ |  //var// = //var// <​nowiki>​^</​nowiki> ​//​expr// ​ |
  
 Exemples : Exemples :
Ligne 205: 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 252: 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 269: 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 277: 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 295: 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**.\\ ​
 \\ \\
Ligne 333: Ligne 349:
  
 Les opérateurs bit-bit, opèrent sur des nombres binaires (une suite de 0 ou de 1).\\  Les opérateurs bit-bit, opèrent sur des nombres binaires (une suite de 0 ou de 1).\\ 
-Les nombres sont d'abords ​convertis en binaire, l’opération est appliquée, puis le résultat est reconverti en décimal.+Les nombres sont d'abord convertis en binaire, l’opération est appliquée, puis le résultat est reconverti en décimal.
  
-<note important>​Les opérateurs bit-à-bit ne doivent être confondus avec les opérateurs logiques</​note>​+<note important>​Les opérateurs bit-à-bit ne doivent ​pas être confondus avec les opérateurs logiques</​note>​
  
 |  Liste des opérateurs bit-à-bit ​ ||| |  Liste des opérateurs bit-à-bit ​ |||
 ^  Opérateurs ​ ^  Désignations ​ ^  Résultats ​ ^ ^  Opérateurs ​ ^  Désignations ​ ^  Résultats ​ ^
 | Opérateur unaire ||| | Opérateur unaire |||
-| **''​~''​** //expr// | Négation binaire | ​Retourne ​le complément à 1 de //expr//\\ (~1 -> 0 ; ~0 -> 1) |+| **''​~''​** //expr// | Négation binaire | ​Renvoie ​le complément à 1 de //expr//\\ (~1 -> 0 ; ~0 -> 1) |
 | Opérateurs binaires ||| | Opérateurs binaires |||
-| //expr1// **''&''​** //expr2// | ET binaire | ​Retourne ​le ET bit-à-bit ​ entre //expr1// et //expr2//\\ (1 ET 1 -> 1 ; 0 ET 0 -> 0 ; 1 ET 0 -> 0 ; 0 ET 1 -> 0) | +| //expr1// **''&''​** //expr2// | ET binaire | ​Renvoie ​le ET bit-à-bit ​ entre //expr1// et //expr2//\\ (1 ET 1 -> 1 ; 0 ET 0 -> 0 ; 1 ET 0 -> 0 ; 0 ET 1 -> 0) | 
-| //expr1// **''​|''​** //expr2// | OU binaire | ​Retourne ​le OU bit-à-bit entre //expr1// et //expr2//\\ (1 OU 1 -> 1 ; 0 OU 0 -> 0 ; 1 OU 0 -> 1 ; 0 OU 1 -> 1) | +| //expr1// **''​|''​** //expr2// | OU binaire | ​Renvoie ​le OU bit-à-bit entre //expr1// et //expr2//\\ (1 OU 1 -> 1 ; 0 OU 0 -> 0 ; 1 OU 0 -> 1 ; 0 OU 1 -> 1) | 
-| //expr1// **''​^''​** //expr2// | OU binaire exclusif (XOR) | ​Retourne ​le OU bit-à-bit exclusif entre //expr1// et //expr2//\\ (1 XOR 1 -> 0 ; 0 XOR 0 -> 0 ; 1 XOR 0 -> 1 ; 0 XOR 1 -> 1) | +| //expr1// **''​^''​** //expr2// | OU binaire exclusif (XOR) | ​Renvoie ​le OU bit-à-bit exclusif entre //expr1// et //expr2//\\ (1 XOR 1 -> 0 ; 0 XOR 0 -> 0 ; 1 XOR 0 -> 1 ; 0 XOR 1 -> 1) | 
-| //expr1// **''<​nowiki><<</​nowiki>''​** //expr2//| Décalage binaire à gauche | ​Retourne ​le décalage de //expr2// bit(s) à gauche de //expr1//\\ (//expr2// 0 ajoutés(s) à droite d'//​expr1//​) | +| //expr1// **''<​nowiki><<</​nowiki>''​** //expr2//| Décalage binaire à gauche | ​Renvoie ​le décalage de //expr2// bit(s) à gauche de //expr1//\\ (//expr2// 0 ajoutés(s) à droite d'//​expr1//​) | 
-| //expr1// **''<​nowiki>>></​nowiki>''​** //expr2//| Décalage binaire à droite | ​Retourne ​le décalage de //expr2// bit(s) à droite de //expr1//\\ (//expr2// bit(s) tronqué(s) à droite d'//​expr1//​) |+| //expr1// **''<​nowiki>>></​nowiki>''​** //expr2//| Décalage binaire à droite | ​Renvoie ​le décalage de //expr2// bit(s) à droite de //expr1//\\ (//expr2// bit(s) tronqué(s) à droite d'//​expr1//​) |
 | //epr//, //expr1//, //expr2// sont sujets aux développements||| | //epr//, //expr1//, //expr2// sont sujets aux développements|||
  
Ligne 406: Ligne 422:
 <note tip> <note tip>
 En bref,​\\ ​ En bref,​\\ ​
-__**Post-incrémentation/​décrémentation**__ : Les signes d'​incrémentation (**''​++''​**) ou de décrémentation (**''<​nowiki>​--</​nowiki>''​**) 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)**.\\ ​+__**Post-incrémentation/​décrémentation**__ : Les signes d'​incrémentation (**''​++''​**) ou de décrémentation (**''<​nowiki>​--</​nowiki>''​**) sont placés **après** une valeur à incrémenter ​(+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 (**''<​nowiki>​--</​nowiki>''​**) 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"​.+__**Pré-incrémentation/​décrémentation**__ : Les signes d'​incrémentation (**''​++''​**) ou de décrémentation (**''<​nowiki>​--</​nowiki>''​**) sont placés **avant** une valeur à incrémenter ​ou à décrémenter ; cette valeur est **incrémentée (+1)** ou **décrémentée (-1)** puis elle est conservée dans "​y"​.
 </​note>​ </​note>​
 =====Tuto précédent ===== =====Tuto précédent =====
doc/programmation/shells/page-man-bash-iv-symboles-dans-les-calculs-mathematiques.txt · Dernière modification: 26/04/2023 19:29 par bendia

Pied de page des forums

Propulsé par FluxBB