← Sommaire SkyLinux

Leçon 81 : bc — La calculatrice en ligne de commande

Introduction

Sous Linux, bc est la calculatrice arbitrary-precision (précision arbitraire) du terminal. Contrairement à expr qui ne gère que des nombres entiers, bc supporte les nombres décimaux, les fonctions mathématiques avancées (trigonométrie, racines carrées, logarithmes), et peut même lire des calculs depuis un fichier ou un pipe.

Son nom vient de "Basic Calculator". C'est l'outil idéal pour des calculs rapides sans quitter le terminal.

Installation

bc est généralement préinstallé sur les distributions Linux. Si ce n'est pas le cas :

# Debian/Ubuntu sudo apt install bc # Fedora/RHEL sudo dnf install bc # Arch Linux sudo pacman -S bc

Utilisation basique

Lancer le mode interactif

$ bc bc 1.07.1 Copyright 1991-1994, 1997, 1998, 1999, 2000, 2004, 2017 Free Software Foundation, Inc. This is free software with ABSOLUTELY NO WARRANTY. For details type `warranty'. 5 + 3 8 10 * 2.5 25.0 quit

Dans le mode interactif, tapez vos calculs et appuyez sur Entrée. Tapez quit pour quitter.

Calcul en une seule ligne

$ echo "15 * 3.5" | bc 52.5 $ echo "scale=2; 100 / 3" | bc 33.33

La variable scale définit le nombre de décimales affichées (par défaut : 0).

Opérateurs disponibles

OpérateurDescriptionExemple
+Addition5 + 3 → 8
-Soustraction10 - 4 → 6
*Multiplication6 * 7 → 42
/Division22 / 7 → 3 (scale=0)
%Modulo (reste)17 % 5 → 2
^Puissance2 ^ 10 → 1024
sqrt(n)Racine carréesqrt(16) → 4

La variable scale

Par défaut, bc affiche uniquement des nombres entiers. Pour obtenir des décimales, utilisez scale :

$ echo "scale=4; 10 / 3" | bc 3.3333 $ echo "scale=10; sqrt(2)" | bc 1.4142135623

Sans scale, la division donne un résultat entier arrondi.

Fonctions mathématiques

bc intègre une bibliothèque mathématique complète. Activez-la avec -l :

$ echo "scale=6; s(3.14159)" | bc -l .000002

Fonctions disponibles avec -l :

FonctionDescription
s(x)Sinus (x en radians)
c(x)Cosinus (x en radians)
a(x)Arc tangente (retourne un angle en radians)
l(x)Logarithme naturel (ln)
e(x)Exponentielle (e^x)
j(n, x)Fonction de Bessel

Utilisation avancée

Calculs depuis un fichier

$ cat > calculs.txt << 'EOF' scale=2 a = 150 b = 45 a + b a * b / 100 sqrt(a) EOF $ bc -q calculs.txt 195.00 67.50 12.24

L'option -q supprime le message de bienvenue.

Substitution de variable

$ echo "longueur=50; largeur=20; longueur * largeur" | bc 1000 $ resultat=$(echo "scale=2; (100 - 25) * 1.19" | bc) $ echo $resultat 89.25

Calculs avec des conditions

$ echo "if (5 > 3) 100 else 0" | bc 100 $ echo "result = (75 >= 60) ? 1 : 0; result" | bc 1

bc supporte les opérateurs de comparaison (>, <, >=, <=, ==, !=) et les instructions if/else, while, for.

Boucle pour calculer une factorielle

$ echo " factorial = 1 for (i = 1; i <= 10; i++) { factorial = factorial * i } factorial " | bc 3628800

Conversion de bases

bc peut convertir entre différentes bases grâce à ibase et obase :

# Décimal vers binaire $ echo "obase=2; 42" | bc 101010 # Binaire vers décimal $ echo "ibase=2; 101010" | bc 42 # Hexadécimal vers décimal $ echo "ibase=16; FF" | bc 255 # Décimal vers hexadécimal $ echo "obase=16; 255" | bc FF

Exemples pratiques

Calculer un pourcentage

# 15% de 200 $ echo "200 * 15 / 100" | bc 30 # Vérifier si un nombre est dans un pourcentage $ echo "if (45 >= 50) 1 else 0" | bc 0

Calculer une augmentation

# Prix avec TVA 7.7% $ echo "scale=2; prix_ht = 150; prix_ht * 1.077" | bc 161.55

Usage dans des scripts bash

#!/bin/bash # Calculer la moyenne de 3 notes note1=85 note2=90 note3=78 moyenne=$(echo "scale=2; ($note1 + $note2 + $note3) / 3" | bc) echo "Moyenne : $moyenne" # Vérifier si l'élève réussit (moyenne >= 60) resultat=$(echo "if ($moyenne >= 60) 1 else 0" | bc) if [ "$resultat" -eq 1 ]; then echo "Réussi !" else echo "Échec" fi

bc vs expr vs autres outils

OutilDécimauxFonctions mathUsage typique
exprNon (entiers seulement)NonCalculs simples dans scripts
bcOui (scale configurable)Oui (trigo, log, sqrt...)Calculs précis, scripts
awkOuiOuiTraitement de données tabulaires
pythonOuiOui (complet)Calculs complexes, scripts

Raccourcis et options utiles

OptionDescription
-qMode silencieux (sans message de bienvenue)
-lUtiliser la bibliothèque mathématique (scale=20 par défaut)
-cCompiler seulement (sans exécuter)

Exercices pratiques

  1. Calculez 256 * 1024 sans calculatrice ni Python.
  2. Trouvez la racine carrée de 2 avec 10 décimales.
  3. Convertissez le nombre 255 en binaire et en hexadécimal.
  4. Créez un script qui convertit des degrés Celsius en Fahrenheit.
  5. Calculez la factorielle de 20 avec une boucle dans bc.

Corrections

  1. echo "256 * 1024" | bc → 262144
  2. echo "scale=10; sqrt(2)" | bc → 1.4142135623
  3. Binaire : echo "obase=2; 255" | bc → 11111111
    Hexadécimal : echo "obase=16; 255" | bc → FF
  4. Script : echo "scale=2; celsius * 9 / 5 + 32" | bc où celsius est une variable
  5. echo "f=1; for(i=1;i<=20;i++) f*=i; f" | bc → 2432902008176640000