De meeste distributies hebben standaard GNU bc aan boord. GNU bc is een programmeerbare rekenmachine waarmee je precieze berekeningen kunt maken. Naast een programmeerbare rekenmachine kan bc ook interactief rekenen. GNU bc kan eveneens via de standaard invoer (stdin) van bewerkingen en data voorzien worden. Dit maakt bc de ideale oplossing om te rekenen in de terminal.
In openSUSE Leap 15.3 is GNU bc niet standaard geïnstalleerd, maar is wel beschikbaar in de standaard softwarebronnen, waardoor je GNU bc installeert met de opdracht:
dany@pindabook:~> sudo zypper install bc
[sudo] wachtwoord voor root:
Gegevens van opslagruimte laden...
Lezen van geïnstalleerde pakketten...
Pakketafhankelijkheden oplossen...
Het volgende NIEUWE pakket zal worden geïnstalleerd:
bc
1 nieuw te installeren pakket.
Totale downloadgrootte: 111,0 KiB. Reeds in de cache: 0 B. Na de bewerking zal aanvullend 218,7 KiB worden gebruikt.
Doorgaan? [j/n/v/...? alle opties tonen] (j):
pakket bc-1.07.1-11.37.x86_64 wordt opgehaald (1/1), 111,0 KiB (218,7 KiB uitgepakt)
Ophalen: bc-1.07.1-11.37.x86_64.rpm .........................................................................................[gereed]
Controleren op conflicten tussen bestanden: .................................................................................[gereed]
(1/1) Installeren van: bc-1.07.1-11.37.x86_64 ...............................................................................[gereed]
dany@pindabook:~> echo "1+1" | bc
2
Hierbij wordt de bewerking 1+1 geschreven (echo) naar bc, die de bewerking uitvoert en weergeeft via de standaard uitvoer (stdout), hier de terminal.
Door de GNU bc opdracht uit te voeren, kom je in een interactieve omgeving terecht. In deze interactieve omgeving voer je bewerkingen (1+1) en opdrachten (quit) uit.
dany@pindabook:~>bc
bc 1.07.1 Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006, 2008, 2012-2017 Free Software Foundation, Inc. This is free software with ABSOLUTELY NO WARRANTY. For details type `warranty'.1+1
2quit
Zonder hulp biedt bc de basisbewerkingen zoals machten, optellen, vermenigvuldigen, aftrekken, delen, verwerking van haken, enz. aan. Een voorbeeld in de interactieve omgeving:
dany@pindabook:~>bc
bc 1.07.1 Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006, 2008, 2012-2017 Free Software Foundation, Inc. This is free software with ABSOLUTELY NO WARRANTY. For details type `warranty'.3^2
9(3^2)*(9)/3
27quit
Met behulp van mathlib via de optie --mathlib kan je geavanceerde functies zoals cosinus, sinus, tangens, enz. gebruiken. Het voorbeeld berekent een cosinus en een sinus in de interactieve omgeving van bc:
dany@pindabook:~>bc --mathlib
bc 1.07.1 Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006, 2008, 2012-2017 Free Software Foundation, Inc. This is free software with ABSOLUTELY NO WARRANTY. For details type `warranty'.c(90)
-.44807361612917015236s(9)
.41211848524175656975quit
Eigen functies definieer je met define en is tussen accolades ingesloten. Het voorbeeld definieert een eenvoudige functie die elk getal dat het krijgt terug geeft.
dany@pindabook:~>bc
bc 1.07.1 Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006, 2008, 2012-2017 Free Software Foundation, Inc. This is free software with ABSOLUTELY NO WARRANTY. For details type `warranty'.define echo(n) { return (n); } echo(2)
2echo(-2)
-2
De functie gebruik je in dezelfde interactieve omgeving.
Met controle opdrachten zoals if kan je bewerkingen uitvoeren als aan een bepaalde voorwaarde wordt voldaan. Let daarbij op het merkwaardige gebruik van accolades. Het Else pakket (uit te voeren indien niet aan de voorwaarde werd voldaan) staat tussen accolades, terwijl de uit te voeren opdrachten indien wel aan de voorwaarde wordt voldaan geen accolades hebben. Beiden eidigen met een puntkomma (;). Het voorbeeld toont in de interactieve omgeving de definitie van een functies die de absolute waarde van een getal teruggeeft.
define abso(n) { if ( n > 0 ) return (n); { return (-n); } } abso(-5)
5abso(5)
5quit
In de interactieve omgeving werken is aanvaardbaar voor snelle kleine berekeningen en experimenten, maar heeft als nadeel dat je alles kwijt bent bij het afsluiten (quit). Fouten verbeteren wordt dan moeilijk. Gelukkig kan GNU bc variabelen en functies uit bestanden lezen.
Als voorbeeld maken we het bestand bcvars.bc aan met de volgende inhoud:
sol=299792458 foo=42 define abso(n) { if ( n > 0 ) return (n); { return (-n); } }
Daarin definiëren we twee variabelen (sol en foo) en de functie abso om de absolute waarde te berekenen. Je kunt de in het tekstbestand bcvars.bc opgeslagen bewerkingen door bc laten uitvoeren in een interactie omgeving met de opdracht:
dany@pindabook:~>bc bcvars.bc
bc 1.07.1 Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006, 2008, 2012-2017 Free Software Foundation, Inc. This is free software with ABSOLUTELY NO WARRANTY. For details type `warranty'.foo
42sol
299792458abso(-23)
23quit
De GNU bc taal is relatief eenvoudig, zolang je maar beschikt over voldoende kennis om zelf bewerkingen samen te stellen om wat je wilt bereiken te berekenen. Gnu bc levert de basisfuncties waarmee je zelf eigen creaties kunt bouwen. Je kunt daarbij veel tijd en werk winnen door gebruik te maken van het werk van andere grootmeesters. Bestanden vol met nieuwe functies, zowel wiskundige basisfuncties als specifieke taken zoals het berekenen van samengestelde interesten zijn beschikbaar op de GNU bc webpagina. Daarnaast kan je de volledige bc documentatiepagina's raadplegen..
GNU bc is een welgekomen hulp om je in de terminal en scripts bij te staan met wiskundige bewerkingen. Je wordt er geen wiskundegenie door, maar het kan je wel helpen om er één te worden.
In openSUSE Leap 15.3 verwijder je GNU bc volledig van de computer met de opdracht:
dany@pindabook:~> sudo zypper remove -u bc
[sudo] wachtwoord voor root:
Lezen van geïnstalleerde pakketten...
Pakketafhankelijkheden oplossen...
Het volgende pakket zal worden VERWIJDERD:
bc
1 te verwijderen pakket.
Na de bewerking zal 218,7 KiB worden vrijgemaakt.
Doorgaan? [j/n/v/...? alle opties tonen] (j):
(1/1) Verwijderen van bc-1.07.1-11.37.x86_64 ................................................................................[gereed]
Er zijn actieve programma's die nog steeds bestanden en bibliotheken gebruiken die verwijderd of bijgewerkt zijn door recente opwaarderingen. Ze zouden opnieuw gestart moeten worden om voordeel te hebben van de laatste vormen van bijwerken. Voer 'zypper ps -s' uit om een lijst met deze programma's te maken.