Décompose un entier en nombre premiers.
bash$ factor 27417 27417: 3 13 19 37
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)
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 )
See also Exemple A.37, « Écart-type ».
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é.
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.
Une autre façon d'utiliser les nombres à virgule flottante est l'utilisation des fonctions internes de la commande awk dans un emballage shell .