La maggior parte dei sistemi POSIX viene fornita con GNU bc, un linguaggio di elaborazione numerica di precisione arbitraria. La sua sintassi è simile a C, ma supporta anche l'esecuzione interattiva di istruzioni e l'elaborazione di dati da standard in (stdin
). Per questo motivo, è spesso la risposta alla domanda "Come faccio a fare matematica nella shell di Linux?" Questo stile di risposta è comune online:
$ echo "1+1" | bc
2
Sebbene sia perfettamente valido, pochi utenti sostengono che sia elegante rispetto a qualcosa di più intuitivo, come:
$ 1+1 #this does not work
2
La modalità interattiva è un po' più semplice:
$ bc
1+1
2
quit
$
Ma le modalità interattive non sempre si adattano al flusso di lavoro desiderato e intuitivo di qualcosa di semplice, come la semplice digitazione del calcolo desiderato. Per questo, suggerisco la calcolatrice di Bluebat in puro Bash.
Ciò che bc fornisce effettivamente è un linguaggio matematico per calcoli avanzati.
Funzioni avanzate con mathlib
Da solo, bc
fornisce funzioni matematiche di base. Puoi testarli in modalità interattiva:
$ bc
3^2
9
(3^2)*(9)/3
27
Usa il --mathlib
opzione per ottenere funzioni avanzate, inclusi seno, coseno, tangente e altro. Nella modalità interattiva, puoi testarne alcuni. Ecco il coseno di 90:
c(90)
-.44807361612917015236
Il seno di 9:
s(9)
.41211848524175656975
Creazione delle tue funzioni bc
Puoi anche creare le tue funzioni in bc. Le definizioni delle funzioni iniziano con define
parola chiave e sono racchiusi tra parentesi graffe. Ecco una semplice funzione inserita in una sessione interattiva che restituisce qualsiasi numero gli sia stato assegnato:
$ bc
define echo(n) {
return (n);
}
Nella stessa sessione interattiva, provalo:
echo(2)
2
echo(-2)
-2
Se dichiarazioni in bc
Il linguaggio bc ha anche una varietà di istruzioni di controllo, la più semplice delle quali è if/else. La sintassi può sembrare familiare a prima vista, ma ci sono sottigliezze nel modo in cui vengono gestite le parentesi graffe. Nota che l'altro La clausola di un'istruzione if è racchiusa tra parentesi graffe, mentre then la clausola non lo è, ma entrambe vengono terminate con un punto e virgola. Ecco una funzione per trovare il valore assoluto di un numero n :
define abso(n) {
if ( n > 0 ) return (n);
{ return (-n); }
}
Nella stessa sessione interattiva, provalo:
abso(-5)
5
abso(5)
5
Importazione di dati in bc
Lavorare in una sessione interattiva è tollerabile per calcoli e sperimentazioni veloci, ma perdi i tuoi dati quando esci ed è difficile modificarli quando commetti errori. Fortunatamente, bc può caricare variabili e funzioni da file esterni.
Ecco un file contenente due variabili (sol
e foo
) e un abso
personalizzato funzione per trovare un valore assoluto:
sol=299792458
foo=42
define abso(n) {
if ( n > 0 ) return (n);
{ return (-n); }
}
Salvalo in un file chiamato bcvars.bc
, così puoi importarlo in una sessione interattiva bc:
$ bc bcvars.bc
foo
42
sol
299792458
abso(-23)
23
Potenzia la tua matematica con bc
Più risorse Linux
- Comandi Linux cheat sheet
- Cheat sheet sui comandi avanzati di Linux
- Corso online gratuito:Panoramica tecnica RHEL
- Cheat sheet della rete Linux
- Cheat sheet di SELinux
- Cheat sheet dei comandi comuni di Linux
- Cosa sono i container Linux?
- I nostri ultimi articoli su Linux
Il linguaggio bc è relativamente semplice, a condizione che tu conosca abbastanza matematica per costruire l'equazione per qualsiasi cosa tu stia cercando di realizzare. Mentre bc per impostazione predefinita fornisce utili funzioni di base e ti consente di crearne di tue, puoi ridurre il tuo carico di lavoro stando sulle spalle dei giganti. I file caricati con nuove funzioni, sia per i fondamenti matematici che per compiti specifici (ad esempio, il calcolo dell'interesse composto), sono disponibili dalla pagina GNU bc ed è disponibile la documentazione completa per bc.
Se sei interessato a fare calcoli matematici migliori in una shell, prova bc. Non ti trasformerà in un genio della matematica, ma potrebbe solo renderti più facile diventarlo.