Stations de travail en ligne OnWorks Linux et Windows

Logo

Hébergement gratuit en ligne pour les postes de travail

<Précédent | Table des matières | Suivant>

Affectation

Bien que ses utilisations ne soient pas immédiatement apparentes, les expressions arithmétiques peuvent effectuer une affectation. Nous avons effectué des missions à plusieurs reprises, mais dans un contexte différent. Chaque fois que nous donnons une valeur à une variable, nous effectuons une affectation. On peut aussi le faire au sein d'expressions arithmétiques :



[moi@linuxbox ~]$ truc=

[moi@linuxbox ~]$ écho $foo


[moi@linuxbox ~]$ si (( foo = 5 )); then echo "C'est vrai."; Fi

C'est vrai.

[moi@linuxbox ~]$ écho $foo

5

[moi@linuxbox ~]$ truc=

[moi@linuxbox ~]$ écho $foo


[moi@linuxbox ~]$ si (( foo = 5 )); then echo "C'est vrai."; Fi

C'est vrai.

[moi@linuxbox ~]$ écho $foo

5


Dans l'exemple ci-dessus, nous affectons d'abord une valeur vide à la variable foo et vérifiez qu'il est bien vide. Ensuite, nous effectuons une if avec la commande composée (( foo = 5

)). Ce processus fait deux choses intéressantes : 1) il attribue la valeur de 5 à la variable

foo, et 2) il est évalué à true car foo a reçu une valeur différente de zéro.


image

Remarque: Il est important de se souvenir de la signification exacte de = dans l'expression ci-dessus. Un seul = effectue la mission. toto = 5 dit "faire foo égal à 5 ​​», tandis que == évalue l'équivalence. toto == 5 dit "est-ce que foo égal à 5 ? » C'est une caractéristique commune à de nombreux langages de programmation. Dans le shell, cela peut être un peu déroutant car le tester la commande accepte un seul = pour l'équivalence de chaîne. Encore une autre raison d'utiliser le plus moderne [[]] et les (( )) commandes composées à la place de tester.


image

En plus de la =, le shell fournit également des notations qui effectuent des tâches très utiles :


Tableau 34-4 : Opérateurs d'affectation


Notation Description

Notation Description


image

paramètre = Plus-value Affectation simple. Attribue Plus-value à paramètre.


image

paramètre += Plus-value Une addition. Équivalent à paramètre = paramètre +

valeur.


image

paramètre -= Plus-value Soustraction. Équivalent à paramètre = paramètre -

valeur.


image

paramètre *= Plus-value Multiplication. Équivalent à paramètre = paramètre

* valeur.


image

paramètre /= Plus-value Division entière. Équivalent à paramètre =

paramètre / valeur.


image

paramètre %= Plus-value Modulo. Équivalent à paramètre = paramètre %

valeur.


image

paramètre++ Post-incrément variable. Équivalent à paramètre =

paramètre + 1 (cependant, voir la discussion ci-dessous).


image

paramètre−− Post-décrémentation variable. Équivalent à paramètre =

paramètre − 1.


image

++paramètre Pré-incrément variable. Équivalent à paramètre =

paramètre + 1.


image

--paramètre Pré-décrément variable. Équivalent à paramètre =

paramètre − 1.


image


Ces opérateurs d'affectation fournissent un raccourci pratique pour de nombreuses tâches arithmétiques courantes. L'incrément (++) et décrémenter (−−) opérateurs, qui augmentent ou diminuent la valeur de leurs paramètres d'une unité. Ce style de notation est tiré du langage de programmation C et a été incorporé dans un certain nombre d'autres langages de programmation, y compris bash.

Les opérateurs peuvent apparaître soit au début d'un paramètre, soit à la fin. Bien qu'ils incrémentent ou décrémentent tous les deux le paramètre de un, les deux placements présentent une différence subtile. S'il est placé au début du paramètre, le paramètre est incrémenté (ou décrémenté) avant que le paramètre ne soit renvoyé. Si placé après, l'opération est effectuée après le paramètre est retourné. C'est assez étrange, mais c'est le comportement voulu. Voici une démonstration :



[moi@linuxbox ~]$ truc=1 [moi@linuxbox ~]$ écho $((foo++)) 1

[moi@linuxbox ~]$ écho $foo

[moi@linuxbox ~]$ truc=1 [moi@linuxbox ~]$ écho $((foo++)) 1

[moi@linuxbox ~]$ écho $foo


2

2


Si nous attribuons la valeur de un à la variable foo puis l'incrémenter avec le ++ opérateur placé après le nom du paramètre, foo est renvoyé avec la valeur un. Cependant, si nous regardons la valeur de la variable une deuxième fois, nous voyons la valeur incrémentée. Si nous plaçons le ++ opérateur devant le paramètre, nous obtenons le comportement le plus attendu :


[moi@linuxbox ~]$ truc=1 [moi@linuxbox ~]$ écho $((++foo)) 2

[moi@linuxbox ~]$ écho $foo

2

[moi@linuxbox ~]$ truc=1 [moi@linuxbox ~]$ écho $((++foo)) 2

[moi@linuxbox ~]$ écho $foo

2


Pour la plupart des applications shell, le préfixe de l'opérateur sera le plus utile.

Les opérateurs ++ et -- sont souvent utilisés en conjonction avec des boucles. Nous allons apporter quelques améliorations à notre script modulo pour le resserrer un peu :



#! / Bin / bash

# modulo2 : démontre l'opérateur modulo pour ((i = 0; i <= 20; ++je )); faire

si (((je % 5) == 0 )); puis printf "<%d> " $i

d'autre

printf "%d " $i

fi fait

printf "\ n"

#! / Bin / bash

# modulo2 : démontre l'opérateur modulo pour ((i = 0; i <= 20; ++je )); faire

si (((je % 5) == 0 )); puis printf "<%d> " $i

d'autre

printf "%d " $i

fi fait

printf "\ n"


Meilleur système d'exploitation Cloud Computing chez OnWorks :