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 [25/02/2023 14:02]
agp91
doc:programmation:shells:page-man-bash-iv-symboles-dans-les-calculs-mathematiques [26/02/2023 02:06]
agp91 [Les opérateurs logiques]
Ligne 171: Ligne 171:
   * **[[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]]**
 +
 +===== L'​opérateur virgule =====
 +
 +L'​opérateur virgule, permet de séparer des opérations.
 +
 +|  L'​opérateur virgule ​ |||
 +^  Opérateur ​ ^  Désignation ​ ^  Résultat ​ ^
 +|Opérateur binaire |||
 +|  //expr1// **'',''​** //​expr2// ​ |  Virgule ​ |  Sépare les opération //expr1// et //expr2// pour les réaliser à la suite. ​ |
 +
 +Exemples :
 +
 +<code user>
 +echo $(( 5+5 , 10+5 , 21+21))
 +</​code><​code>​
 +42
 +</​code>​
 +Seule la dernière opération est retournée.
 +
 +C'est plus utile avec des affectations :
 +<code user>
 +echo $(( a=5+5 , b=10+5 , 21+21))
 +echo a=$a b=$b
 +unset a b
 +</​code><​code>​
 +42
 +a=10 b=15
 +</​code>​
 +===== Les opérateurs logiques =====
 +
 +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**.\\ ​
 +Les commandes **let** et **<​nowiki>​((..))</​nowiki>​** suivent le standard C :
 +
 +  * **0** est compris comme **faux**.
 +  * Tout autres valeurs (positive ou négatives),​ souvent **1**, sont comprise comme **vrai**.
 +
 +... Dans bash, c'est le contraire (voir la note plus bas).
 +
 +Trois opérateurs logiques sont disponibles : 1 unaire et deux binaires.
 +
 +<note important>​Les opérateurs logiques ne doivent être confondus avec les opérateurs bit-à-bit.</​note>​
 +
 +|  Liste des opérateurs logiques ​ |||
 +^  Opérateurs ​ ^  Désignations ​ ^  Résultats ​ ^
 +| Opérateur unaire |||
 +|  **''​!(''​** //expr// **''​)''​** ​ |  Négation logique ​ | Retourne l'​inverse de //expr//\\ !(1) = 0 (NON vrai = faux)\\ !(0) = 1 (NON faux = vrai)|
 +| Opérateurs binaires |||
 +|  //expr1// **''<​nowiki>&&</​nowiki>''​** //​expr2// ​ |  ET logique ​ | 1 <​nowiki>&&</​nowiki>​ 1 = 1 (vrai ET vrai = vrai)\\ 1 <​nowiki>&&</​nowiki>​ 0 = 0 (vrai ET faux = faux)\\ 0 <​nowiki>&&</​nowiki>​ 1 = 0 (faux ET vrai = faux)\\ 1 <​nowiki>&&</​nowiki>​ 1 = 0 (faux ET faux = faux) |
 +|  //expr1// **''<​nowiki>​||</​nowiki>''​** //​expr2// ​ |  OU logique ​ | 1 <​nowiki>&&</​nowiki>​ 1 = 1 (vrai OU vrai = vrai)\\ 1 <​nowiki>&&</​nowiki>​ 0 = 1 (vrai OU faux = vrai)\\ 0 <​nowiki>&&</​nowiki>​ 1 = 1 (faux OU vrai = vrai)\\ 0 <​nowiki>&&</​nowiki>​ 0 = 0 (faux OU faux = faux) |
 +| //epr//, //expr1//, //expr2// sont sujets aux développements|||
 +
 +Exemples :
 +
 +<code user>
 +echo "!(0) = $((!(0)))"​
 +echo "​!(5+5) = $((!(5+5)))"​
 +echo $((!1))
 +</​code><​code>​
 +!(0) = 1
 +!(5+5) = 0
 +bash: !1: event not found
 +</​code>​
 +
 +<​note>​L'​opérateur de négation logique s'​utilise uniquement avec des parenthèses : **!(//​expr//​)**.</​note>​
 +
 +Les opérations logiques peuvent se suivre :
 +
 +<code user>
 +echo $(( 1 && 1))
 +echo $(( 1 && 0))
 +echo $(( 1 && 1 && 0)) # vrai && vrai && faux, retourne faux
 +</​code><​code>​
 +1
 +0
 +0
 +</​code>​
 +
 +Les opérateurs **<​nowiki>&&</​nowiki>​** et **<​nowiki>​||</​nowiki>​**,​ étudient leur opérande de droite (//expr2//) que si cela est pertinent :
 +
 +<code user>
 +a=1
 +echo $((0 && (a=10) )) a=$a # Le second opérande (a=10) n'est pas étudié car cela n'est pas pertinent
 + # avec 0 (faux) et l'​opérateur &&, le résultat sera toujours faux.
 +
 +echo $((1 && (a=10) )) a=$a # Le second opérande (a=10) est étudié car cela est pertinent
 + # avec 1 (vrai) et l'​opérateur &&, le résultat pourra être vrai.
 +unset a
 +</​code><​code>​
 +0 a=1
 +1 a=10
 +</​code>​
 +
 +<​note>​Nous avons placer l'​affection **a=10** entre parenthèse **(a=10)** pour la protéger contre la priorités des opérateurs.\\
 +\\ 
 +Si non, l'​opérateur **<​nowiki>&&</​nowiki>​** étant prioritaire à l'​opérateur **=**, les opérations effectués sont **<​nowiki>​0 && a</​nowiki>​**,​ puis **=10**, ce qui va générer une erreur.
 +\\ 
 +<code user>
 +echo $((1 && a=10 )) a=$a
 +</​code><​code>​
 +bash: 0 && a=10  : tentative d'​affectation à une non-variable (le symbole erroné est « =10  »)
 +</​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]].
 +</​note>​
 +
 +S'il n'est pas pertinent d'​étudier l'​opérande de droite et qu'il existe un autre opérateur, alors les opération se poursuive.
 +<code user>
 +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
 + # L'​opération se reporte sur l'​opérateur ||, étant pertinent, son opérande de droite est étudié.
 +a=1
 +echo $((a && (a=10) || (a=20) )) a=$a
 +unset a
 +</​code><​code>​
 +1 a=20
 +1 a=10
 +</​code>​
 +
 +<note important>​
 +Le opération logiques retournent une valeur booléenne.\\ ​
 +\\
 +Les commandes **let** et **<​nowiki>​((..))</​nowiki>​** suivant le standard C.\\ 
 +Elles numérisent **faux** avec **0** et **vrai** avec une valeur **non nulle**.\\ ​
 +\\
 +Avec bash c'est l'​inverse,​ **faux** est une  valeur **non nulle** et **vrai** correspond à **0**.\\ ​
 +\\ 
 +Il en résulte que le code retour renvoyé est l'​inverse du résultat des comparaisons effectuées par **let** ou **<​nowiki>​((..))</​nowiki>​**
 +<code user>
 +echo $(( !(0) ))
 +(( !(0) )); echo $?
 +</​code><​code>​
 +1
 +0
 +</​code>​
 +</​note>​
  
 ===== Les opérateurs relationnels ===== ===== Les opérateurs relationnels =====
Ligne 177: Ligne 313:
 Voir [[doc:​programmation:​shells:​page-man-bash-iii-les-operateurs-de-comparaison-numerique#​comparaison-numerique-avec|Comparaison numérique avec ((...))]] Voir [[doc:​programmation:​shells:​page-man-bash-iii-les-operateurs-de-comparaison-numerique#​comparaison-numerique-avec|Comparaison numérique avec ((...))]]
  
 +<note important>​
 +Comme avec les opérateurs logiques, le résultat des comparaisons des opérateurs relationnels retourne une valeur booléenne.\\ ​
 +(**vrai** en cas de succès **faux** en cas d'​échec).\\ ​
 +\\
 +Le code de retour renvoyé est donc contraire au résultat des comparaisons effectuées par **let** ou **<​nowiki>​((..))</​nowiki>​**
 +<code user>
 +echo $((24<​42))
 +((24<​42));​ echo $?
 +</​code><​code>​
 +1
 +0
 +</​code>​
 +</​note>​
 ===== Les opérateurs bit-à-bit ===== ===== Les opérateurs bit-à-bit =====
  
-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'​abords 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>​
  
 |  Liste des opérateurs bit-à-bit ​ ||| |  Liste des opérateurs bit-à-bit ​ |||
Ligne 192: Ligne 343:
 | //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 | 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//​) | | //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//​) |
 +| //epr//, //expr1//, //expr2// sont sujets aux développements|||
  
 Exemples Exemples
Ligne 206: Ligne 358:
 Voir aussi : Voir aussi :
  
-  * [[atelier:​chantier:​bash:​les-operations-binaires|Les opérations binaire]] +  * [[atelier:​chantier:​bash:​operations-les-nombres-binaires|Opérations ​sur les nombres ​binaires]]
-=====Opérateurs binaires ===== +
-Ces opérateurs s'​utilisent ​sur des binaires, (sur des 1 et des zéro).+
  
-^ Opérateurs ​      ^ significations ​                                            ^ +===== Opérateurspriorités =====
-| ''<<'' ​ | décalage d'un bit à gauche (=mutiplication par deux)       | +
-| ''>>''​ | 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 (inclusif) binaire ​                                     | +
-| ''​~'' ​  | non binaire ​                                               | +
-| ''​^'' ​  | XOR (ou exclusif) binaire ​                                 |  +
- +
-<​note>​ +
-Le ''&<''​ ( "​et"​ binaire), le ''​|<''​ ("​ou"​ binaire)et le ''​~''​ ("​non"​ binaire)\\ peuvent aussi être remplacés (de façon équivalente) par les opérateurs logiques que l'on a vus au sujet de la composition de commandes sur erreur ou sur réussite. +
- +
-> ''&&'' ​ : 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