Login
Newsletter
Werbung

Do, 16. März 2017, 15:00

Shellskripte mit Aha-Effekt: Zahlenspiele

Manchmal muss man Zahlen zu einer anderen Zahlensystem-Basis darstellen, zum Beispiel vom Dual- oder Binärsystem (Basis 2) zum Sedezimal- oder Hexadezimalsystem (Basis 16). So lässt sich auch mit IP-Adressen oder Netzmasken herumrechnen.

Es ist immer wieder faszinierend, wie viel man mit der Shell erledigen kann, bevor man zu einer Programmiersprache greifen muss. Nicht zuletzt sind daran auch die zahlreichen Unterprogramme beteiligt, nämlich alle Kommandozeilen-Tools, die sich auf der Platte tummeln. Manchmal trifft man auch auf Systeme, die aus Sicherheitsgründen nur wenig mit Tools bevölkert sind. Aber auch da muss man nicht gleich aufgeben.

Bei den meisten Linux-Distributionen und Unix-Systemen ist der bc verfügbar. Das Tool bc - An arbitrary precision calculator language ist ein Rechner auf der Kommandozeile. Die GNU-Version ist sogar programmierbar. Er rechnet in beliebiger Genauigkeit und beherrscht auch etliche mathematische Funktionen, die der Kommandozeilenparameter -l aktiviert: Unter anderem sind das Sinus s(x), Cosinus c(x), beide im Bogenmaß), Arcustangens a(x), die Exponentialfunktion e(x), der natürliche Logarithmus l(x) und die Quadratwurzel sqrt(x).

Der bc besitzt weder einen Eingabe- noch einen Ausgabeprompt. Nach der Begrüßung rechnet man im interaktiven Modus sofort los. Wie in der Shell kann man mit den Auf- und Ab-Pfeiltasten die letzten Eingaben zurückholen und editieren. Die Eingabe quit beendet das Programm im interaktiven Modus. In einer Pipe erledigt der bc seine Rechenaufgabe und beendet sich dann sofort.

Das folgende Listing zeigt, was passiert, wenn man einfach mal drauf los probiert (Zeile 03). Es gehen auch große Zahlen, wie Zeile 06 zeigt. Zeile 09 berechnet die Kreiszahl Pi: Der Standard sind 20 Stellen, aber wer mehr will, bekommt auch mehr. Zeilen 14 und 15 definieren eine Funktion und wenden sie an. Auch Gleitpunktzahlen gehen (Zeile 18). Am Schluss haben wir das übliche Problem bei begrenzter Stellenzahl:

01 $ bc -l -q
02 
03 4*5+12+4
04 36
05 
06 2^100
07 1267650600228229401496703205376
08 
09 4*a(1)
10 3.14159265358979323844
11 scale=100; 4*a(1)
12 3.141592653589793238462643383279502   \
        884197169399375105820974944592307   \
        8164062862089986280348253421170676
13
14 define f(x) {x^3}
15 f(5)
16 125
17 
18 2.345*2
19 4.690
20
21 (100/3)*3
22 99.99999999999999999999

Aber dies soll ja kein bc-Kurs werden, sondern das Tool soll für Zahlenumwandlung zum Einsatz kommen.

Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten
Werbung