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>

Logique

Comme nous l'avons découvert au chapitre 27, le (( )) La commande composée prend en charge une variété d'opérateurs de comparaison. Il y en a quelques autres qui peuvent être utilisés pour évaluer la logique. Voici la liste complète:


Tableau 34-6 : Opérateurs de comparaison


Description de l'opérateur

Description de l'opérateur

<= inférieur ou égal à


image

>= Supérieur ou égal à


image

< Inférieur à


image

> Supérieur à


image


image

== Égal à


image

!= Non égal à


image

&& ET logique


image

|| OU logique


image

expression1?expression2:expression3 Opérateur de comparaison (ternaire). Si expression expression1

est évalué comme non nul (arithmétique vrai) alors expression2, autre expression3.


image


Lorsqu'elles sont utilisées pour des opérations logiques, les expressions suivent les règles de la logique arithmétique ; c'est-à-dire que les expressions évaluées à zéro sont considérées comme fausses, tandis que les expressions non nulles sont considérées comme vraies. Les (( )) La commande composée mappe les résultats dans les codes de sortie normaux du shell :



[moi@linuxbox ~]$ si ((1)); puis echo "true" ; else echo "faux" ; Fi

oui

[moi@linuxbox ~]$ si ((0)); puis echo "true" ; else echo "faux" ; Fi

non

[moi@linuxbox ~]$ si ((1)); puis echo "true" ; else echo "faux" ; Fi

oui

[moi@linuxbox ~]$ si ((0)); puis echo "true" ; else echo "faux" ; Fi

non


Le plus étrange des opérateurs logiques est le opérateur ternaire. Cet opérateur (qui est calqué sur celui du langage de programmation C) effectue un test logique autonome. Il peut être utilisé comme une sorte d'instruction if/then/else. Il agit sur trois expressions arithmétiques (les chaînes ne fonctionneront pas), et si la première expression est vraie (ou non nulle), la deuxième expression est exécutée. Sinon, la troisième expression est exécutée. Nous pouvons essayer ceci sur la ligne de commande :



[moi@linuxbox ~]$ a = 0 [moi@linuxbox ~]$ ((a<1?++a:--a)) [moi@linuxbox ~]$ faire écho $a

1

[moi@linuxbox ~]$ ((a<1?++a:--a))

[moi@linuxbox ~]$ faire écho $a

0

[moi@linuxbox ~]$ a = 0 [moi@linuxbox ~]$ ((a<1?++a:--a)) [moi@linuxbox ~]$ faire écho $a

1

[moi@linuxbox ~]$ ((a<1?++a:--a))

[moi@linuxbox ~]$ faire écho $a

0


Ici, nous voyons un opérateur ternaire en action. Cet exemple implémente une bascule. A chaque exécution de l'opérateur, la valeur de la variable a passe de zéro à un ou vice versa.

Veuillez noter que l'exécution de l'affectation dans les expressions n'est pas simple.


Lors d'une tentative, bash déclarera une erreur :


[moi@linuxbox ~]$ a = 0

[moi@linuxbox ~]$ ((a<1?a+=1:a-=1))

bash : (( : a<1?a+=1:a-=1 : tentative d'affectation à une variable (le jeton d'erreur est "-=1")

[moi@linuxbox ~]$ a = 0

[moi@linuxbox ~]$ ((a<1?a+=1:a-=1))

bash : (( : a<1?a+=1:a-=1 : tentative d'affectation à une variable (le jeton d'erreur est "-=1")


Ce problème peut être atténué en entourant l'expression d'affectation de parenthèses :



[moi@linuxbox ~]$ ((a<1?(a+=1):(a-=1)))

[moi@linuxbox ~]$ ((a<1?(a+=1):(a-=1)))


Ensuite, nous voyons un exemple plus complet d'utilisation d'opérateurs arithmétiques dans un script qui produit une simple table de nombres :



#! / Bin / bash

# arith-loop : script pour démontrer les opérateurs arithmétiques terminé=0

a = 0

printf "a\ta**2\ta**3\n" printf "=\t====\t====\n"


jusqu'à ((fini)); faire b=$((a**2))

c=$((a**3))

printf "%d\t%d\t%d\n" $a $b $c ((a<10?++a:(fini=1)))

fait

#! / Bin / bash

# arith-loop : script pour démontrer les opérateurs arithmétiques terminé=0

a = 0

printf "a\ta**2\ta**3\n" printf "=\t====\t====\n"


jusqu'à ((fini)); faire b=$((a**2))

c=$((a**3))

printf "%d\t%d\t%d\n" $a $b $c ((a<10?++a:(fini=1)))

fait


Dans ce script, nous implémentons une boucle until basée sur la valeur du manteau variable. Initialement, la variable est mise à zéro (arithmétique fausse) et nous continuons la boucle jusqu'à ce qu'elle devienne non nulle. Dans la boucle, nous calculons le carré et le cube de la variable compteur

une. A la fin de la boucle, la valeur de la variable compteur est évaluée. S'il est inférieur à 10 (le nombre maximum d'itérations), il est incrémenté de un, sinon la variable fini prend la valeur un, ce qui rend fini arithmétiquement vrai, mettant ainsi fin à la boucle. L'exécution du script donne ce résultat :


[moi@linuxbox ~]$ boucle arithmétique

[moi@linuxbox ~]$ boucle arithmétique


a

= 0

1

2

3

4

5

6

7

8

9

10

a

= 0

1

2

3

4

5

6

7

8

9

10


image

une**2 une**3

==== ====

une**2 une**3

==== ====

0

1

4

9

16

25

36

49

64

81

100

0

1

4

9

16

25

36

49

64

81

100

0

1

8

27

64

125

216

343

512

729

1000

0

1

8

27

64

125

216

343

512

729

1000

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