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 [07/10/2015 13:13]
milou atelier:chantier:page-man-bash-iv-symboles-dans-les-calculs-mathematiques renommé en doc:programmation:shells:page-man-bash-iv-symboles-dans-les-calculs-mathematiques (Page taguée à placer, sortie du chantier)
doc:programmation:shells:page-man-bash-iv-symboles-dans-les-calculs-mathematiques [25/02/2023 14:02]
agp91
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
-  * Commentaires sur le forum : [[https://​debian-facile.org/​viewtopic.php?​pid=87499#p87499 ​| ici]] ((N'​hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !))+  * Commentaires sur le forum : [[https://​debian-facile.org/​viewtopic.php?​pid=140882#p140882 ​| ici]] ((N'​hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !))
  
  
   * [[doc:​programmation:​shells:​bash-les-differents-caracteres-speciaux|Vision d'​ensemble]]   * [[doc:​programmation:​shells:​bash-les-differents-caracteres-speciaux|Vision d'​ensemble]]
-  * [[docs:​programmation:​shells:​la-page-man-bash-les-caracteres-speciaux|Détail et caractères]]+  * [[doc:​programmation:​shells:​la-page-man-bash-les-caracteres-speciaux|Détail et caractères]]
   * [[doc:​programmation:​shells:​la-page-man-bash-ii-les-operateurs-lexicographiques|Les opérateurs lexicographiques]]   * [[doc:​programmation:​shells:​la-page-man-bash-ii-les-operateurs-lexicographiques|Les opérateurs lexicographiques]]
   * [[doc:​programmation:​shells:​page-man-bash-iii-les-operateurs-de-comparaison-numerique|Les opérateurs de comparaison numérique]]   * [[doc:​programmation:​shells:​page-man-bash-iii-les-operateurs-de-comparaison-numerique|Les opérateurs de comparaison numérique]]
   * ;-)   * ;-)
-  * [[atelier:chantier:​page-man-bash-v-les-tableaux|Les tableaux]] +  * [[doc:programmation:​shells:​page-man-bash-v-les-tableaux|Les tableaux]] 
-  * [[atelier:chantier:​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 parametres]] 
-  * [[atelier:chantier:​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écuple quotient) |  +
-| ''​ <​nowiki>​%</​nowiki>​ '' ​   | modulo (récuple 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).
  
-=====Opérateurs d'​affectation arithmétique=====+Avec **let** et **<​nowiki>​((...))</​nowiki>​**,​ la plage numérique autorisée est : **-9223372036854775808 < 0 > 9223372036854775807**
  
-^opérateurs ​                        ​^opérations ​                      ^ +Après l'​évaluation des expressions qu'​elles contiennent,​ **let** et **<​nowiki>​((...))</​nowiki>​** renvoient le code de retour : 
-''<​nowiki>​=</​nowiki>​ '' ​          ​affectation arithmétique ​       ​+ 
-| ''<​nowiki>​+=</​nowiki>​ '' ​         incrémentation ​                 ​| +  * **0**, si le résultat est inférieur ou supérieur à 0. 
-| ''<​nowiki>-=</nowiki> '' ​         | décrémentation ​                 +  * **1**, si le résultat est égale à 0. 
-| ''​<​nowiki>​/=</nowiki> ​'' ​         | affectation par division ​       + 
-| ''<​nowiki>​+=</​nowiki>​ '' ​         affectation par multiplication ​ | +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. 
-| ''<​nowiki>​%=</​nowiki>​ '' ​         afectation du reste             |+ 
 +<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 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.\\  
 +  
 +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. 
 + 
 +|  Liste des 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 //​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 | 
 + 
 +Exemples : 
 + 
 +<code user> 
 +a=42 # Affecte 42 à la variable a 
 +echo $((-a)) # Retourne l'opposé de la valeur contenue dans la variable a. 
 + 
 +echo $((21+025)) #​ Retourne l’addition de l'octal 25 au décimal 21. 
 + 
 +echo 3/​2=$((3/​2)) #​ Retourne 3/2 
 +echo 3/2 reste $((3%2)) # Retourne le reste de 3/2 
 + 
 +echo a=$a a^2=$((a**2)) #​ Retourne la valeur de la variable élevée à la puissance 2 
 + 
 +unset a 
 +</code><​code>​ 
 +-42 
 +42 
 +3/2=
 +3/2 reste 1 
 +a=42 a^2=1764 
 +</code> 
 +===== Les opérateurs d'affectation ===== 
 + 
 +Les opérateurs d'affectation,​ permettent affecter une valeur à une variable ou d'en modifier la valeur. 
 + 
 + Liste des opérateurs d'​affectation ​ ||| 
 +^  Opérateurs ​ ^  Désignations ​ ^ Résultats ​ ^ 
 +| Opérateurs unaires ||| 
 +| **''​++''​** //var// | Ré-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// | Ré-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 | 
 +| Opérateurs binaires ||| 
 +| //var// **''​=''​** //expr// Simple affectation | Affecte //epxr// à la variable //var//| 
 +| //var// **''​+=''​** //expr// | Ré-affectation par l'​incrémentation | //var// = //var// + //​expr//​ | 
 +| //var// **''​-=''​** //expr// | Ré-affectation par la décrémentation | //var// = //var// - //expr// |  
 +| //var// **''​*=''​** //expr// | Ré-affectation par la multiplication | //var// = //var// * //​expr//​ | 
 +| //var// **''/​=''​** //expr// | Ré-affectation par la division | //var// = //var// / //expr//
 +//var// **''​%=''​** //expr// | Ré-affectation par modulo | //var// = //var// % //​expr//​ | 
 + 
 +Exemples : 
 + 
 +<code user> 
 +declare -p a 
 +let a=24 ; declare -p a 
 +((a=42)) ; echo a=$a 
 + 
 +let '​a ​+= 42' ; echo "a+=42 -> a=$a"​ 
 +(( a /= 2 )) ; echo "​a/​=2 ​ -> a=$a"​ 
 + 
 +unset a 
 +</code><​code>​ 
 +bash: declare: a : non trouvé 
 +declare -- a="​24"​ 
 +a=42 
 +a+=42 -> a=84 
 +a/=2  -> a=42 
 +</​code>​ 
 + 
 +<​note>​ 
 +Contrairement à la commande **declare -i**, les commandes **let** et **<nowiki>((..))</​nowiki>​** ne donnent pas l'attribut numérique (**-i**) à une variable. 
 +</​note>​ 
 + 
 +<code user> 
 +declare -i b=42 
 +declare -p b 
 +echo "​Pré-incrémentation à 1  : Avant b=$b ; Pendant b=$((++b)) ; Après : b=$b"​ 
 +echo "​Post-décrémentation à 1 : Avant b=$b ; Pendant b=$((b--)) ; Après : b=$b"​ 
 + 
 +unset b 
 +</​code><​code>​ 
 +declare -i b="​42"​ 
 +Pré-incrémentation à 1  : Avant b=42 ; Pendant b=43 ; Après : b=43 
 +Post-décrémentation à 1 : Avant b=43 ; Pendant b=43 ; Après : b=42 
 +</​code>​ 
 + 
 +Voir aussi : 
 +  * **[[doc:​programmation:​shells:​script-bash-variables-arguments-parametres?&#​typologie-des-variables|typologie de variables]]** 
 +  * **[[doc:​programmation:​shells:​script-bash-variables-arguments-parametres?&#​variables-numeriques-et-calculs|variables numériques et calculs]]** 
 + 
 +===== Les opérateurs relationnels ===== 
 + 
 +Les opérateurs relationnels permettent la comparaison entre deux epressions numériques.\\  
 +Voir [[doc:​programmation:​shells:​page-man-bash-iii-les-operateurs-de-comparaison-numerique#​comparaison-numerique-avec|Comparaison numérique avec ((...))]] 
 + 
 +===== Les opérateurs bit-à-bit ===== 
 + 
 +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. 
 + 
 +|  ​Liste des opérateurs bit-à-bit ​ ||| 
 +^  Opérateurs ​ ^  Désignations ​ ^  Résultats ​ ^ 
 +Opérateur unaire ||| 
 +| **''​~''​** //expr// | Négation binaire | Retourne le complément à 1 de //expr//\\ (~1 -> 0 ; ~0 -> 1) | 
 +| 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// | 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 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// **''<​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 à droite | Retourne le décalage de //expr2// bit(s) à droite de //expr1//\\ (//expr2// bit(s) tronqué(s) à droite d'//​expr1//​) | 
 + 
 +Exemples 
 +<code user> 
 +echo $((~42)) 
 +echo $((42^42)) 
 +echo $((42<<​2)) 
 +</​code><​code>​ 
 +-43 
 +
 +168 
 +</​code>​
  
-**Voir :** +Voir aussi :
-  * **[[atelier:​chantier:​script-bash-variables-arguments-parametres?&#​typologie-des-variables|typologie de variables]]** +
-  * **[[atelier:​chantier:​script-bash-variables-arguments-parametres?&#​variables-numeriques-et-calculs|variables numériques et calculs]]**+
  
 +  * [[atelier:​chantier:​bash:​les-operations-binaires|Les opérations binaire]]
 =====Opérateurs binaires ===== =====Opérateurs binaires =====
 Ces opérateurs s'​utilisent sur des binaires, (sur des 1 et des zéro). Ces opérateurs s'​utilisent sur des binaires, (sur des 1 et des zéro).
Ligne 71: Ligne 231:
 ===Post-incrémentation et pré-incrémentation :=== ===Post-incrémentation et pré-incrémentation :===
  
-<code bash>+<code bash script>
 #!/bin/bash #!/bin/bash
 declare -i x=20 y  # ici les signes = permettent une affection declare -i x=20 y  # ici les signes = permettent une affection
Ligne 80: Ligne 240:
 </​code>​ </​code>​
  
-<code bash>+<code bash script>
 #!/bin/bash #!/bin/bash
 declare -i x=20 y declare -i x=20 y
Ligne 90: Ligne 250:
  
 ===Post-décrémentation et pré-décrémentation :=== ===Post-décrémentation et pré-décrémentation :===
-<code bash>+<code bash script>
 #!/bin/bash #!/bin/bash
 declare -i x=20 y declare -i x=20 y
Ligne 99: Ligne 259:
 </​code>​ </​code>​
  
-<code bash>+<code bash script>
 #!/bin/bash #!/bin/bash
 declare -i x=20 y declare -i x=20 y
Ligne 118: Ligne 278:
  
 =====La suite, c'est ici ===== =====La suite, c'est ici =====
-[[atelier:chantier:​page-man-bash-v-les-tableaux|Bash : les tableaux]]+[[doc:programmation:​shells:​page-man-bash-v-les-tableaux|Bash : les tableaux]]
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