Tips en Trucs 2017

Rekenmachine voor de terminal en scripts

In grafische omgevingen kennen we allemaal de standaard rekenmachines. Met deze rekenmachines kan je eenvoudige, wetenschappelijke, statistiek berekeningen en bewerkingen voor programmeurs uitvoeren. Voor de terminal bestaat een gelijkaardig programma, namelijk bc.

De bc (Basic Calculator) bevat alles wat je verwacht van een wetenschappelijk, financieel of basis rekenmachine. Om complexe berekeningen uit te voeren kan je bc gebruiken in scripts.

Daar bc door systeemsoftware zoals CUPS (afdruksysteem) wordt gebruikt, is het op bijna elk Linux systeem standaard geïnstalleerd. Dit kan je checken met de opdracht:

dany@main:~> rpm -q bc
bc-1.06.95-11.13.x86_64

Eenvoudige berekeningen met bc

Je kunt bc gebruiken met z'n eigen rekenomgeving (shell). In de rekenomgeving van bc kan verschillende berekeningen na elkaar uitvoeren. Bij het starten van bc kom je automatisch in de rekenomgeving met wat info over het programma.

dany@main:~> bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.

Je kunt nu berekeningen of opdrachten invoeren, één per regel:

1+1

Na een druk op Return krijg je het antwoord:

2

Je kunt optellen (+), aftrekken (-), vermenigvuldigen (*), delen (/), haakjes en exponenten (^) gebruiken. Vanzelfsprekend wordt de uitvoervolgorde van de bewerkingen correct gevolgd.

(4+7)*2
22
4+7*2
18

Om de rekenomgeving af te sluiten, druk je Ctrl+d (einde invoer).
bc shell

Een andere manier om met bc berekeningen en opdrachten uit te voeren, is met behulp van echo. Je stuurt zo de berekening of opdracht naar bc met de pipe functie (|) van de terminalomgeving.

dany@main:~> echo '1+1' | bc
2

Om meerdere berekeningen naar bc te sturen, scheid je berekeningen met een puntkomma. De resultaten worden op verschillende regels weergegeven.

dany@main:~> echo '1+1; 2+2' | bc
2
4

Cijfers na de komma

Om het aantal cijfers na de komma vast te leggen, gebruikt bc het scale concept. De standaard scale is 0. Delingen gebruiken steeds de scale instelling. Als je de scale niet instelt, krijg je soms onverwachte resultaten:

dany@main:~> echo '3/2' | bc
1
dany@main:~> echo 'scale=3; 3/2' | bc
1.500

Vermenigvuldigen gebruikt een andere, niet altijd verwachte benadering:

dany@main:~> echo '3*2' | bc
6
dany@main:~> echo '3*2.0' | bc
6.0

Optellen en aftrekken vertonen dan weer verwachte resultaten:

dany@main:~> echo '7-4.15' | bc
2.85

Andere talstelsels

Soms is het handig dat je kunt rekenen met getallen in een ander talstelsel. Standaard rekent bc met decimale getallen (tiendelig stelsel). Je kunt ook rekenen met hexadecimale en binaire getallen. Gebruik de opdrachten ibase en obase om respectievelijk het talstelsel voor de ingevoerde getallen en de uitgevoerde getallen (resultaten) vast te leggen. Eénmaal je ibase gebruikt, wordt elk ingevoerde getal beschouwd als een getal in het opgegeven talstelsel.

Om hexadecimale getallen naar decimale getallen om te zetten, gebruik je:

dany@main:~> echo 'ibase=16; A42F' | bc
42031
dany@main:~> echo 'ibase=16; 5F72+C39B' | bc
74509

Hexadecimale cijfers hoger dan 9 moet je in hoofdletters ingeven (A-F). Om de resultaten in hexadecimale schrijfwijze weer te geven, voeg je obase toe:

dany@main:~> echo 'obase=16; ibase=16; 5F72+C39B' | bc
1230D

Wat als je in de rekenomgeving van bc werkt en je terug met decimale getallen wilt werken. Als je eenmaal met ibase in het hexadecimale systeem werkt, is elk getal dat je invoert namelijk een hexadecimaal getal. Pas ibase aan door cijfers te gebruiken uit het ingestelde talstelsel. Als je in het hexadecimale talstelsel werkt, schakel je terug naar het decimale stelsel over met:

ibase=A
bc talstelsels

En verder

Dit is echter slechts een kennismaking met de mogelijkheden van bc. Je kunt er functies, variabelen en lussen mee definiëren om complexe berekeningen en programma's uit te voeren. Je kunt deze programma's als tekstbestanden opslaan om ze uit te voeren als je ze nogmaals nodig hebt. Op het internet vind je verschillende voorbeelden en aanvullende functiebibliotheken voor bc (zie GNU bc).