La plupart des systèmes POSIX sont livrés avec GNU bc, un langage de traitement numérique de précision arbitraire. Sa syntaxe est similaire à C, mais il prend également en charge l'exécution interactive d'instructions et le traitement de données à partir du standard in (stdin
). Pour cette raison, c'est souvent la réponse à la question "Comment puis-je faire des maths dans le shell Linux ?" Ce style de réponse est courant en ligne :
$ echo "1+1" | bc
2
Bien que cela soit parfaitement valable, peu d'utilisateurs affirment que c'est élégant par rapport à quelque chose de plus intuitif, comme :
$ 1+1 #this does not work
2
Le mode interactif est un peu plus simple :
$ bc
1+1
2
quit
$
Mais les modes interactifs ne correspondent pas toujours au flux de travail souhaité et intuitif de quelque chose de simple, comme simplement taper le calcul que vous voulez. Pour cela, je vous propose la calculatrice de Bluebat en pur Bash.
Ce que bc fournit en réalité est un langage mathématique pour le calcul avancé.
Fonctions avancées avec mathlib
Seul, bc
fournit des fonctions mathématiques de base. Vous pouvez les tester en mode interactif :
$ bc
3^2
9
(3^2)*(9)/3
27
Utilisez le --mathlib
option pour obtenir des fonctions avancées, y compris le sinus, le cosinus, la tangente, etc. En mode interactif, vous pouvez tester certains d'entre eux. Voici le cosinus de 90 :
c(90)
-.44807361612917015236
Le sinus de 9 :
s(9)
.41211848524175656975
Créer vos propres fonctions bc
Vous pouvez également créer vos propres fonctions dans bc. Les définitions de fonction commencent par define
mot-clé et sont entourés d'accolades. Voici une fonction simple saisie dans une session interactive qui renvoie le nombre qui lui est donné :
$ bc
define echo(n) {
return (n);
}
Dans la même session interactive, testez-le :
echo(2)
2
echo(-2)
-2
Instructions If en bc
Le langage bc a également une variété d'instructions de contrôle, dont la plus simple est if/else. La syntaxe peut sembler familière à première vue, mais il existe des subtilités dans la façon dont les accolades sont gérées. Notez que le autre clause d'une instruction if est entourée d'accolades, tandis que then clause n'est pas, mais les deux se terminent par un point-virgule. Voici une fonction pour trouver la valeur absolue d'un nombre n :
define abso(n) {
if ( n > 0 ) return (n);
{ return (-n); }
}
Dans la même session interactive, testez-le :
abso(-5)
5
abso(5)
5
Importer des données dans bc
Travailler dans une session interactive est tolérable pour des calculs et des expérimentations rapides, mais vous perdez vos données lorsque vous quittez, et il est difficile de les modifier lorsque vous faites des erreurs. Heureusement, bc peut charger des variables et des fonctions à partir de fichiers externes.
Voici un fichier contenant deux variables (sol
et foo
) et un abso
personnalisé fonction pour trouver une valeur absolue :
sol=299792458
foo=42
define abso(n) {
if ( n > 0 ) return (n);
{ return (-n); }
}
Enregistrez ceci dans un fichier appelé bcvars.bc
, afin que vous puissiez l'importer dans une session bc interactive :
$ bc bcvars.bc
foo
42
sol
299792458
abso(-23)
23
Améliorez vos maths avec bc
Plus de ressources Linux
- Aide-mémoire des commandes Linux
- Aide-mémoire des commandes Linux avancées
- Cours en ligne gratuit :Présentation technique de RHEL
- Aide-mémoire sur le réseau Linux
- Aide-mémoire SELinux
- Aide-mémoire sur les commandes courantes de Linux
- Que sont les conteneurs Linux ?
- Nos derniers articles Linux
Le langage bc est relativement simple, à condition que vous connaissiez suffisamment les mathématiques pour construire l'équation de tout ce que vous essayez d'accomplir. Alors que bc fournit par défaut des fonctions de base utiles et vous permet de créer les vôtres, vous pouvez réduire votre charge de travail en vous tenant sur les épaules de géants. Les fichiers chargés de nouvelles fonctions, à la fois pour les fondamentaux mathématiques ainsi que pour des tâches spécifiques (par exemple, le calcul des intérêts composés), sont disponibles sur la page GNU bc, et une documentation complète pour bc est disponible.
Si vous souhaitez faire de meilleurs calculs dans un shell, essayez bc. Cela ne fera pas de vous un génie des mathématiques, mais cela pourrait vous aider à le devenir plus facilement.