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 [24/02/2023 21:19]
agp91 [Bash : les symboles dans les calculs]
doc:programmation:shells:page-man-bash-iv-symboles-dans-les-calculs-mathematiques [25/02/2023 14:02]
agp91 [Opérateurs binaires]
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, ​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).+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**
  
-Après l'​évaluation des expression ​qu'​elles contiennent,​ **let** et **<​nowiki>​((...))</​nowiki>​** renvoient le code de retour :+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.   * **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 é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 ​remplacer ​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.
  
-<​note ​important>+<​note ​warning>
 La commande **$[...]** équivalente à la commande **<​nowiki>​$((..))</​nowiki>​** __**ne doit plus être utilisée**__.\\ ​ La commande **$[...]** équivalente à la commande **<​nowiki>​$((..))</​nowiki>​** __**ne doit plus être utilisée**__.\\ ​
 \\  \\ 
Ligne 54: Ligne 54:
 </​note>​ </​note>​
  
-=====Opérateurs arithmétiques ​=====+===== Les systèmes numériques ​=====
  
-^opérateurs ​ ^opérations ​                    ^ +Les expressions numériques évaluées par **let** et **<​nowiki>​((...))</​nowiki>​** peuvent contenir des nombres de différent système numérique.\\  
-| ''​<​nowiki> ​+</​nowiki>​ '' ​   | addition ​                     | +  
-| ''​ <​nowiki>​-</​nowiki>​ '' ​   | soustraction ​                 | +L'évaluation des expression ​(le résultat) sera toujours retourné en entier décimal.
-| ''​ <​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''​.+  * 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).
  
-=====Opérateurs d'​affectation arithmétique=====+Si non, la syntaxe suivante peut-être utilisée :
  
-^opérateurs ​                        ​^opérations ​                      ^ +  * [**base#​**]**n**
-| ''<​nowiki>​=</​nowiki>​ '' ​          | affectation arithmétique ​       | +
-| ''<​nowiki>​+=</​nowiki>​ '' ​         | incrémentation ​                 | +
-| ''<​nowiki>​-=</​nowiki>​ '' ​         | décrémentation ​                 | +
-| ''<​nowiki>/​=</​nowiki>​ '' ​         | affectation par division ​       | +
-| ''<​nowiki>​+=</​nowiki>​ '' ​         | affectation par multiplication ​ | +
-| ''<​nowiki>​%=</​nowiki>​ '' ​         | afectation du reste             |+
  
-**Voir :**+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=1 
 +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?&#​typologie-des-variables|typologie de variables]]**
   * **[[doc:​programmation:​shells:​script-bash-variables-arguments-parametres?&#​variables-numeriques-et-calculs|variables numériques et calculs]]**   * **[[doc:​programmation:​shells:​script-bash-variables-arguments-parametres?&#​variables-numeriques-et-calculs|variables numériques et calculs]]**
  
-=====Opérateurs binaires ​===== +===== Les opérateurs relationnels ​=====
-Ces opérateurs s'​utilisent sur des binaires, (sur des 1 et des zéro).+
  
-^ Opérateurs ​      ^ significations ​                                            ^ +Les opérateurs relationnels permettent la comparaison entre deux epressions numériques.\\ ​ 
-| ''<<'' ​ | décalage d'un bit à gauche (=mutiplication par deux)       | +Voir [[doc:​programmation:​shells:​page-man-bash-iii-les-operateurs-de-comparaison-numerique#​comparaison-numerique-avec|Comparaison numérique avec ((...))]]
-''>>''​ | 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 (inclusifbinaire ​                                     | +
-| ''​~'' ​  | non binaire ​                                               | +
-| ''​^'' ​  | XOR (ou exclusif) binaire ​                                 | +
  
-<note+===== Les opérateurs bit-à-bit ===== 
-Le ''&​<'' ​( "​et" ​binaire), le ''​|<''​ ("​ou" ​binaire), et le ''​~'' ​("​non" ​binaire)\\ ​peuvent aussi être remplacés ​(de façon équivalentepar les opérateurs logiques que l'on a vus au sujet de la composition ​de commandes sur erreur ou sur réussite.+ 
 +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 aussi : 
 + 
 +  * [[atelier:​chantier:​bash:​les-operations-binaires|Les opérations 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 
-^_^ 
-</​note>​ 
 ===== Écriture utile pour les boucles ===== ===== Écriture utile pour les boucles =====
 ===Post-incrémentation et pré-incrémentation :=== ===Post-incrémentation et pré-incrémentation :===
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