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 01:37] agp91 [Les opérateurs logiques] |
doc:programmation:shells:page-man-bash-iv-symboles-dans-les-calculs-mathematiques [26/02/2023 02:25] agp91 [Les opérateurs logiques] |
||
---|---|---|---|
Ligne 172: | Ligne 172: | ||
* **[[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]]** | ||
- | ===== Les opérateurs relationnels ===== | + | ===== L'opérateur virgule ===== |
- | Les opérateurs relationnels permettent la comparaison entre deux epressions numériques.\\ | + | L'opérateur virgule, permet de séparer des opérations. |
- | Voir [[doc:programmation:shells:page-man-bash-iii-les-operateurs-de-comparaison-numerique#comparaison-numerique-avec|Comparaison numérique avec ((...))]] | + | |
+ | | 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 : | ||
- | <note important> | ||
- | 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).\\ | ||
- | \\ | ||
- | Les commandes **let** et **<nowiki>((..))</nowiki>** suivent 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> | <code user> | ||
- | echo $((24<42)) | + | echo $(( 5+5 , 10+5 , 21+21)) |
- | ((24<42)); echo $? | + | |
</code><code> | </code><code> | ||
- | 1 | + | 42 |
- | 0 | + | </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> | </code> | ||
- | </note> | ||
===== Les opérateurs logiques ===== | ===== Les opérateurs logiques ===== | ||
Ligne 204: | Ligne 208: | ||
* Tout autres valeurs (positive ou négatives), souvent **1**, sont comprise comme **vrai**. | * Tout autres valeurs (positive ou négatives), souvent **1**, sont comprise comme **vrai**. | ||
- | ... Dans bash, c'est le contraire (voir la note plus haut). | + | ... Dans bash, c'est le contraire (voir la note plus bas). |
- | Trois opérateurs logiques sont disponibles : 1 unaire et deux binaires. | + | Trois opérateurs logiques sont disponibles : 1 unaire et 2 binaires. |
<note important>Les opérateurs logiques ne doivent être confondus avec les opérateurs bit-à-bit.</note> | <note important>Les opérateurs logiques ne doivent être confondus avec les opérateurs bit-à-bit.</note> | ||
Ligne 231: | Ligne 235: | ||
</code> | </code> | ||
- | <note>L'opérateur de négation logique s'utilise uniquement avec des parenthèses : **!(//expr//)**.</note> | + | <note>L'opérateur de négation logique **!**) s'utilise uniquement avec des parenthèses : **!(//expr//)**.</note> |
Les opérations logiques peuvent se suivre : | Les opérations logiques peuvent se suivre : | ||
Ligne 245: | Ligne 249: | ||
</code> | </code> | ||
- | Les opérateurs **<nowiki>&&</nowiki>** et **<nowiki>||</nowiki>**, étudient leur opérande de droite (//expr2//) que si cela est pertinent : | + | Les opérateurs **<nowiki>&&</nowiki>** et **<nowiki>||</nowiki>**, étudient l'opérande de droite (//expr2//) que si cela est pertinent : |
<code user> | <code user> | ||
Ligne 260: | Ligne 264: | ||
</code> | </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.\\ | + | <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 **=**, les opérations effectués sont **<nowiki>0 && a</nowiki>**, puis **=10**, ce qui va générer une erreur. | + | 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. |
\\ | \\ | ||
<code user> | <code user> | ||
Ligne 270: | Ligne 274: | ||
</code> | </code> | ||
- | Voir plus bas. | + | 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> | </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. | + | 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. |
<code user> | <code user> | ||
a=0 | a=0 | ||
Ligne 288: | Ligne 293: | ||
<note important> | <note important> | ||
Le opération logiques retournent une valeur booléenne.\\ | Le opération logiques retournent une valeur booléenne.\\ | ||
- | (**vrai** en cas de succès **faux** en cas d'échec).\\ | ||
\\ | \\ | ||
- | Les commandes **let** et **<nowiki>((..))</nowiki>** suivent le standard C.\\ | + | Les commandes **let** et **<nowiki>((..))</nowiki>** suivant 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**.\\ | ||
\\ | \\ | ||
Avec bash c'est l'inverse, **faux** est une valeur **non nulle** et **vrai** correspond à **0**.\\ | 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>** | + | Il en résulte que le code retour renvoyé est l'inverse du résultat des opérations logiques effectuées par **let** ou **<nowiki>((..))</nowiki>** |
<code user> | <code user> | ||
echo $(( !(0) )) | echo $(( !(0) )) | ||
(( !(0) )); echo $? | (( !(0) )); echo $? | ||
+ | </code><code> | ||
+ | 1 | ||
+ | 0 | ||
+ | </code> | ||
+ | </note> | ||
+ | |||
+ | ===== 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 ((...))]] | ||
+ | |||
+ | <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> | </code><code> | ||
1 | 1 |