AA_PO-20954-SXC-Djayo_sxc_hu-Taschenrechner.jpg

© Djayo, sxc.hu

Shell-Taschenrechner "bc" und Bash-Rechenfunktionen

Rechnen in der Shell

Wer regelmäßig mit der Shell arbeitet, muss für kleinere Berechnungen kein grafisches Tool wie KCalc starten: Mit "bc" steht ein leistungsfähiger Rechner fürs Terminal zur Verfügung, und einfache Rechnungen sind auch direkt in der Shell möglich.

Kleine Rechenaufgaben fallen häufig an: Dann gilt es z. B., schnell einige Euro-Beträge zu addieren oder durch Bruchrechnung einen prozentualen Anteil zu bestimmen. Die einfachen Grundrechenarten (Addition +, Subtraktion –, Multiplikation * und Division /) sind direkt in der Shell verfügbar, allerdings nur für Ganzzahlen (ohne Nachkommastellen). Das geht über den Shell-Operator $((...)): Der zu berechnende Ausdruck kommt in doppelte runde Klammern, und am Anfang steht ein Dollar-Zeichen (wie beim Zugriff auf Variablen).

bash$ echo $((3+4))
7
bash$ echo $((42*24))
1008
bash$ echo $((17/3))
5

An der Beispieldivision erkennen Sie, dass die Shell Nachkommastellen weg lässt: Bei der "Division mit Rest" von 17 durch 3 ist das Ergebnis 5, es bleibt ein Rest von 2 (denn 3*5+2=7). Den Rest der Division können Sie mit dem "Modulo"-Operator % ausgeben:

bash$ echo $((17%3))
2

Wollen Sie in komplexeren Ausdrücken Klammern setzen, ist auch das möglich – dadurch entstehen eventuell leicht unübersichtliche Befehle. Im folgenden Aufruf stehen am Anfang drei öffnende Klammern: Die ersten beiden gehören zum Shell-Operator $((...)), die dritte Klammer öffnet die Summe (3+4):

bash$ echo $(((3+4)*2))
14

Wenn Sie Zahlen bereits in Variablen gespeichert haben, können Sie auch direkt im Rechenausdruck darauf zugreifen, ohne den Variablennamen ein weiteres Dollar-Zeichen voranzustellen:

bash$ x=5
bash$ y=10
bash$ echo $((x+2*y))
25

Das klappt auch mit bereits vorhandenen Shell-Variablen, etwa COLUMNS und LINES, welche die Abmessungen des Terminalfensters enthalten – die Anzahl der im Fenster darstellbaren Zeichen erhalten Sie dann über das Produkt:

bash$ echo $COLUMNS $LINES
112 45
bash$ echo $((COLUMNS*LINES))
5040

Variablen ändern

Um einer Variablen einen berechneten Wert zuzuweisen, gehen Sie genau wie bei der sonstigen Arbeit mit Variablen vor – Befehle beginnen mit dem Variablennamen, dann folgt ein Gleichheitszeichen, und dahinter setzen Sie den Rechenausdruck. Der darf auch die zu setzende Variable enthalten: Für die Berechnung arbeitet die Shell dann mit dem bisherigen Wert, und nach dem Kommando enthält die Variable den neuen Wert. Zum Verdoppeln einer Variable x können Sie also das Kommando x=$((2*x)) verwenden:

bash$ echo $x
6
bash$ x=$((2*x))
bash$ echo $x
12

Lassen Sie das führende Dollar-Zeichen weg, können Sie direkt Zuweisungsbefehle (mit Berechnungen) in die Doppelklammern setzen, etwa in der Form

bash$ ((x=x+3))
bash$ echo $x
15

Für häufig benötigte Operationen, die eine Variable verändern und bei der Berechnung den ursprünglichen Wert mit nutzen, gibt es Abkürzungen:

  • ((x+=y)) – addiert y zur Variable x,
  • ((x-=y)) – substrahiert y von der Variablen x,
  • ((x*=y)) – multipliziert y mit der Variablen x,
  • ((x/=y)) – dividiert x durch y,
  • ((x++)) – erhöht den Wert von x um 1 ("Inkrement"),
  • ((x--)) – verringert den Wert von x um 1 ("Dekrement").

All diesen Befehlen ist gemein, dass x nach dem Ausführen den neu berechneten Wert enthält. Wer eine Programmiersprache beherrscht, kennt diese Zuweisungsbefehle (dort dann ohne die doppelten runden Klammern).

Zahlen dürfen auch negativ sein (und erhalten dann wie üblich ein führendes Minuszeichen), aber wer mit Nachkommastellen arbeiten will, muss auf ein externes Tool zurückgreifen.

Der Taschenrechner "bc"

Für komplexere Rechenaufgaben bietet sich das Programm bc (engl.: basic calculator, deutsch: einfacher Rechner) [1] an, das auf allen Linux-Distributionen vorinstalliert ist. bc bietet einen interaktiven Modus, in dem Sie Rechenbefehle eingeben (und den Sie mit [Strg]+[D] wieder verlassen können), lässt sich aber auch programmieren: Dazu schreiben Sie kleine bc-Skripte, die dann (ähnlich wie Shell-Skripte) vom Rechner abgearbeitet werden. Die Features von bc gehen dann auch weit über ein Rechenprogramm hinaus: Mit Variablen, Funktionen und Fallunterscheidungen steht eine kleine Skriptsprache zur Verfügung – halt mit dem Fokus auf Rechenaufgaben. Der Namensbestandteil "basic" (einfach) ist jedenfalls irreführend.

Auf die Scripting-Möglichkeiten werden wir hier nicht weiter eingehen, sondern nur die elementaren Features vorstellen, die bc bereits zu einem Ersatz für grafische Taschenrechner wie KCalc (KDE) [3] oder Calculator (Gnome) [4] machen.

bc gibt nach dem Start einige Zeilen Text aus, in denen es über Version und Copyright informiert; mit der Option -q können Sie diese Ausgabe unterdrücken, wenn sie stört. Einen Prompt zeigt das Programm nicht an, wartet aber trotzdem in einer leeren Zeile auf die Eingabe eines mathematischen Ausdrucks (oder eines Befehls). Wollen Sie mit Floating-Point-Zahlen rechnen (also Nachkommastellen sehen), verwenden Sie die Option -l.

bash$ bc -l
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'.3+4
7

Einfache Rechnungen geben Sie einfach in der üblichen Notation ein, die vier Grundrechenarten sind (wie zu erwarten) über +, –, * und / erreichbar, der Operator für Potenzen ist ^. Mit Klammern erzeugen Sie komplexere Ausdrücke wie etwa

(40.00+17.50+33.33)*1.19
108.0877

Dank einer eingebauten History können Sie ältere Berechnungen wiederholen und (wie in der Shell) auch noch die Zeile bearbeiten, dazu können Sie mit [Pfeil links] und [Pfeil rechts] zeichenweise sowie mit [Strg]+[Pfeil links] und [Strg]+[Pfeil rechts] wortweise durch die Zeile wandern; "wortweise" bedeutet dabei, zum Anfang der jeweils vorherigen oder nächsten Zahl zu springen.

Nach dem Beenden von bc (mit [Strg]+[D]) geht die History allerdings verloren, beim nächsten Programmstart geht es mit einer leeren History von vorne los. Wollen Sie mit dem letzten Ergebnis weiter rechnen, können Sie dieses als last in die folgende Formel einbauen:

last+200
308.0877last-100
208.0877

Alternativ zu last können Sie auch einen einzelnen Punkt (.) verwenden. last ist ein Beispiel für eine Variable, allerdings eine spezielle, die bc nach jeder Berechnung eigenständig aktualisiert. Sie können auch selbst Variablen definieren, indem Sie über den Operator = Werte zuweisen – das eignet sich prima zum Speichern von Zwischenergebnissen. Nach einer Zuweisungsoperation gibt es keine Ergebnisausgabe:

a=40.00+17.50+33.33mwst=19a*(100+mwst)/100
108.08770000000000000000scale=2a*(100+mwst)/100
108.08

Das Beispiel zeigt eine weitere Spezialvariable: scale enthält die Anzahl der Nachkommastellen, die bc berücksichtigen soll. Wie Sie hier erkennen, rundet bc weder "kaufmännisch" noch "mathematisch" [5], sondern schneidet einfach überzählige Stellen ab. Das Beispiel der Mehrwertsteuerberechnung ist also ungeeignet. Das Problem lässt sich aber mit einem Trick lösen, damit Sie korrekt mit Währungsbeträgen umgehen können: Dazu ist vor dem Runden der Wert 0,005 zu addieren (oder bei negativen Zahlen zu subtrahieren). Das gelingt für obiges Beispiel, indem Sie zunächst mit mehr Nachkommastellen arbeiten, dann die Genauigkeit auf zwei Stellen setzen, den Korrekturwert (0,005 oder -0,005) addieren und dann durch 1,0 teilen:

x=a*(100+mwst)/100scale=2if (x<0) y=(x-0.005)/1.0 else y=(x+0.005)/1.0y
108.09

Für die meisten Zwecke (wenn es nicht gerade um Buchhaltung geht) ist das aber unnötig; stellen Sie einfach über scale eine ausreichende Genauigkeit ein.

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • Ohne Crash durch die Bash
    Mit der Bourne-Again-Shell schreiben Linux-Anwender Skripte, die nervige und stupide Aufgaben automatisieren – etwa um auf dem Notebook Strom einzusparen.
  • Zu Befehl: bash, bc
    Es muss nicht immer ein grafischer Taschenrechner wie xcalc oder KCalc sein – auch die Bash beherrscht einfache arithmetische Operationen, und für die fortgeschrittenen Mathematiker gibt's bc.
  • Erste Schritte mit Bash-Skripten
    Das Programmieren von Shell-Skripten ist keine Hexerei. Schon mit wenigen Grundkenntnissen sparen Sie durch das Automatisieren alltäglicher Aufgaben viel Zeit.
  • Im Innern der Muschel
    Mit der Version 4 erhält die Bourne Again Shell (Bash) neue Funktionen, die sie einmal mehr als leistungsfähige Programmierschnittstelle zum System und zu Applikationen qualifiziert.
  • Mehr Komfort
    Von einfachen Abfragen bis hin zu komplexen Menüs: Mit dem Toolkit Dialog bauen Sie eine grafische Oberfläche für Shell-Skripte, die oft nicht mehr als eine zusätzliche Zeile brauchen.
Kommentare

Infos zur Publikation

EL 11/2017-01/2018: Einstieg in Linux

Digitale Ausgabe: Preis € 9,80
(inkl. 19% MwSt.)

EasyLinux erscheint vierteljährlich und kostet 9,80 Euro. Weitere Infos zum Heft finden Sie auf der Homepage.

Das Jahresabo kostet ab 33,30 Euro. Details dazu finden Sie im Computec-Shop.

Bei Google Play finden Sie digitale Ausgaben für Tablet & Smartphone.

HINWEIS ZU PAYPAL: Die Zahlung ist ohne Paypal-Konto ganz einfach per Kreditkarte oder Lastschrift möglich!      

Stellenmarkt

Aktuelle Fragen

Broadcom Adapter 802.11n nachinstallieren
Thomas Mengel, 31.10.2017 20:06, 2 Antworten
Hallo, kann man nachträglich auf einer Liveversion, MX Linux auf einem USB-Stick, nachträglich...
RUN fsck Manually / Stromausfall
Arno Krug, 29.10.2017 12:51, 1 Antworten
Hallo, nach Absturz des Rechners aufgrund fehlendem Stroms startet Linux nicht mehr wie gewohn...
source.list öffnet sich nicht
sebastian reimann, 27.10.2017 09:32, 2 Antworten
hallo Zusammen Ich habe das problem Das ich meine source.list nicht öffnen kann weiß vlt jemman...
Lieber Linux oder Windows- Betriebssystem?
Sina Kaul, 13.10.2017 16:17, 6 Antworten
Hallo, bis jetzt hatte ich immer nur mit
IT-Kurse
Alice Trader, 26.09.2017 11:35, 2 Antworten
Hallo liebe Community, ich brauche Hilfe und bin sehr verzweifelt. Ih bin noch sehr neu in eure...