15.8. Commandes mathématiques

« Compter »

factor

Décompose un entier en nombre premiers.

bash$ factor 27417
 27417: 3 13 19 37
 

Exemple 15.46. Générer des nombres premiers

&primes2;

bc

Bash ne peut traiter les calculs en virgule flottante et n'intègre pas certaines fonctions mathématiques importantes. Heureusement, bc est là pour nous sauver.

bc n'est pas simplement une calculatrice souple à précision arbitraire, elle apporte aussi beaucoup des facilités disponibles normalement dans un langage de programmation.

La syntaxe de bc ressemble vaguement à celle du C.

bc est devenu un outil UNIX assez puissant pour être utilisé via un tube et est manipulable dans des scripts.

Voici un exemple simple d'utilisation de bc pour calculer la valeur d'une variable. Il emploie la substitution de commande.

 variable=$(echo "OPTIONS; OPERATIONS" | bc)
 

Exemple 15.47. Paiement mensuel sur une hypothèque

&monthlypmt;

Exemple 15.48. Conversion de base

&base;

Une autre façon d'utiliser bc est d'utiliser des documents en ligne embarqués dans un bloc de substitution de commandes. Ceci est très intéressant lorsque le script passe un grand nombre d'options et de commandes à bc

variable=`bc >> CHAINE_LIMITE
 options
 instructions
 operations
 CHAINE_LIMITE
 `

 ...or...


 variable=$(bc >> CHAINE_LIMITE
   options
   instructions
   operations
   CHAINE_LIMITE
   )

Exemple 15.49. Appeler bc en utilisant un document en ligne

&altbc;

Exemple 15.50. Calculer PI

&cannon;

See also Exemple A.37, « Écart-type ».

dc

L'utilitaire dc (desk calculator) utilise l'empilement et la « notation polonaise inversée » (RPN). Comme bc, il possède les bases d'un langage de programmation.

echo "7 8 * p" | dc     # 56
#  Pousse 7, puis 8, sur le dessus de la pile,
#+ multiplie (opérateur "*" operator), ensuite imprime le résultat
#+ (opérateur "p").

La plupart des gens évitent dc à cause de son mode de saisie peu intuitif et du caractère assez obscur de ses opérateurs. Toutefois, cette commande garde son utilité.

Exemple 15.51. Convertir une valeur décimale en hexadécimal

&hexconvert;

L'étude de la page info de la commande dc est un moyen pénible de prendre conscience de sa complexité. Il semble cependant qu'une poignée de connaisseurs de dc se délectent de pouvoir exiber leur maîtrise de cet outil puissant mais mystérieux.

bash$ echo "16i[q]sa[ln0=aln100%Pln100/snlbx]sbA0D68736142snlbxq" | dc
Bash
              

dc <<< 10k5v1+2/p # 1.6180339887
#  ^^^            Alimente dc en opérations en utilisant une chaîne Here.
#      ^^^        Fournit 10 et déclare la précision du calcul (10k).
#         ^^      Fournit 5 et prend sa racine carré (5v, v = racine carrée).
#           ^^    Fournit 1 et l'additionne au résultat courant (1+).
#             ^^  Fournit 2 et divise le résultat courant par 2 (2/).
#               ^ Sort et affiche le résultat (p pour "pop").
#  Le resultat est  1.6180339887 ...
#  ... qui est en fait le nombre d'or pythagoricien avec 10 décimales.

Exemple 15.52. Factorisation

&factr;

awk

Une autre façon d'utiliser les nombres à virgule flottante est l'utilisation des fonctions internes de la commande awk dans un emballage shell .

Exemple 15.53. Calculer l'hypoténuse d'un triangle

&hypot;