Der Rechner Spigot zeichnet sich durch hohe Genauigkeit aus. Mit diesem Tool erzielen Sie in der Shell höchst präzise Resultate.
Während der Befehl bc für viele eine bekannte Größe darstellt, mangelt es dem Konkurrenten Spigot noch an Bekanntheit. Nach kurzem Studium des Handbuchs und dem Abarbeiten einiger Beispiele arbeitet es sich mit dem Tool jedoch sehr unkompliziert. Seinen Namen borgt das Programm bei dem bekannten Algorithmus zum Berechnen mathematischer Konstanten. Allerdings gibt es noch andere, ebenso benannte Programme – hier droht Verwechslungsgefahr. Die Software stammt aus der Feder von Simon Tatham [1].
Laden Sie das aktuelle Quellpaket [2] herunter, entpacken Sie es, und wechseln Sie ins dabei angelegte Verzeichnis. Mit ./configure erstellen Sie das für das Kompilieren wichtige Makefile. Treten dabei Fehler auf, installieren Sie die als fehlend angemerkten Ressourcen mit dem Paketmanagement nach. Anschließend erstellen Sie das lauffähige Programm durch die Eingabe von make. Mit den notwendigen Rechten (als Benutzer root oder mit dem Befehl su) verschieben Sie Programm und Komponenten ins Zielverzeichnis, indem Sie make install in das Terminal eingeben.
Um die Installation zu testen, geben Sie im Terminal spigot 1+2 ein. Wenn Sie hier das korrekte Ergebnis erhalten, hat die Installation funktioniert. Online [3] finden Sie ein Handbuch, das Sie in die Arbeit mit der Software einführt.
Allgemeines
Eine Spezialität des Tools besteht in der mehr oder weniger unendlichen Darstellungstiefe von Zahlen. Geben Sie probehalber spigot pi am Terminal ein: Die Ausgabe der Kreiszahl läuft und läuft, bis Sie [Strg]+[C] drücken.
Um negative Eingabewerte von Optionen und Befehlen zu unterscheiden, bringen Sie Ihre Rechenaufgabe in Hochkommas und Klammern unter (Abbildung 1). Bei positiven Zahlen können Sie sich das schenken. Spätestens aber bei umfangreicheren Aktionen sollten Sie stets die Aufgabe in Hochkommas setzen, schon um die Shell nicht zu verwirren. Für den Einsatz von Variablen gilt: Wegen der Shell müssen Sie sogar die Klammern entwerten.

Abbildung 1: Bei der Eingabe gilt es, die korrekte Schreibweise von positiven und negativen Zahlen zu beachten.
Für die tägliche Arbeit gilt es, die Stellen von Ergebnissen zu begrenzen und zu runden. Im ersten Schritt legen Sie die Genauigkeit mit -dStellen an. Das schneidet die Werte ab, rundet sie aber nicht. Die Art des Rundens bestimmt ein eigener Parameter. Die wichtigsten Optionen von Spigot fasst die Tabelle “Wichtige Parameter” zusammen, Abbildung 2 zeigt einige Beispiele.
|
Parameter |
Hinweis |
|---|---|
|
|
Stellenzahl begrenzen, kein Runden |
|
|
Auf- und Abrunden |
|
|
Runden, stets von null weg |
|
|
Runden, stets Richtung null |
|
|
Aufrunden, zum Positiven |
|
|
Abrunden, zum Negativen |
|
|
Rest (Modulo) |
|
|
Potenzen |
|
|
Variable definieren |
|
|
Zahlen formatieren |
|
|
Zahlensysteme umrechnen |
Um die Ausgabe in ein bestimmtes Format zu bringen, setzen Sie ans Ende der Eingabe die passende Printf-Anweisung. Mit man printf erfahren Sie mehr über die Operatoren. Die mathematischen Funktionen von Spigot, wie etwa Wurzel (sqrt), entsprechen den bekannten Schlüsselwörtern diverser Programmiersprachen. Es gilt Punkt vor Strich.
Genau wie Bc funktioniert auch Spigot nicht in einer Pipe. Vielmehr teilen Sie dem Programm mit, auf welchem Eingabekanal und mit welcher Basis es einen Wert entgegennimmt. Das Konstrukt für die Rechenanweisung lautet folgendermaßen:
baseBasisfd:Dateideskriptor
Um den Wert stattdessen aus einer Datei auszulesen, verwenden Sie die folgende Anweisung:
baseBasisfile:Dateiname
Beim Einsatz in einem Skript maskieren Sie Variablen durch doppelte Anführungszeichen, wenn Sie diese an den entsprechenden Stellen des Konstrukts verwenden.
Arbeiten mit Variablen
Listing 1 zeigt, wie Sie Variablen in eine Spigot-Anweisung einbinden. Beim Testen kommen auch negative Zahlen zum Einsatz. Die einzelnen Optionen runden (--rn), kappen bei 50 Nachkommastellen (-d50) und formatieren die Ausgabe (--printf, 8 Stellen, 2 Nachkommastellen, Fließkommazahl).
Listing 1
#! /bin/bash
echo "Rechnen mit Spigot und Variablen"
read -p " Erste Zahl: " a
read -p "Zweite Zahl: " b
echo "Ergebnisse ohne Formatierung"
echo "----------------------------"
spigot --rn -d50 \("$a"*"$b"\)
spigot --rn -d50 \("$a"/"$b"\)
echo "Ergebnisse mit Formatierung"
echo "----------------------------"
spigot --rn -d50 \("$a"*"$b"\) --printf %8.2f
spigot --rn -d50 \("$a"/"$b"\) --printf %8.2f
Abbildung 3 zeigt den Ablauf. Sie müssen dazu das Skript entweder in der Form bash Skript aufrufen oder mit entsprechenden Rechten zum Ausführen versehen.

Abbildung 3: Ein kleines Shell-Skript demonstriert einige Funktionen von Spigot, unter anderem den Einsatz von Shell-Variablen als Teil der Anweisung.
Konvertieren
Das Umrechnen zwischen Zahlensystemen erledigen Sie mit dem Tool über verschiedene Formen der Syntax. Die hier gezeigte funktioniert in jedem Fall:
echo Wert | spigot -bBasis Ausgabe 'baseBasis Eingabefd:0'
In Abbildung 4 finden Sie Beispiele für die gängigen Praxisfälle.

Abbildung 4: Das Umrechnen von Zahlen hin zu einem anderen Basiswert gelingt mit Spigot auf verschiedenen Wegen.
Frequenz berechnen
Das Exempel aus Listing 2 zeigt, wie Sie mit Variablen als Hochzahlen umgehen. Hier sehen Sie, dass die Variablen mittels Anführungszeichen isoliert sind, das e-12 beschreibt den Rest der Hochzahl. Mit dem Skript berechnen Sie die Frequenz eines Schwingkreises anhand der Spule (Induktivität, µH) und des Kondensators (Kapazität, pF). Abbildung 5 zeigt den Ablauf.
Listing 2
#! /bin/bash #qrgrech.sh echo "Schwingkreisberechnung, Ergebnis in MHz" read -p "Induktivität in µH: " L read -p "Kondensator in pF: " C echo "Induktivität: $L µH, Kondensator $C pF" # Im Vorspann stellenrichtige Umrechnung für ISO-Einheiten auf H und F echo "------------------------------" qrg=$(spigot --rn -d50 "$L"e-6*"$C"e-12 | spigot --rn -d50 '(1/(2pi*sqrt(base10fd:0))/1000000)' --printf %10.3f) echo "Frequenz $qrg MHz"
Rechenanweisung in Variablen
Sie können Anweisungen für eine Rechenoperation auch in einer Variablen unterbringen. Da die Möglichkeit besteht, dass ein Anwender mit negativen Zahlen rechnet, müssen Sie Variablen, die Zahlen führen, mit entwerteten Klammern umgeben (Listing 3). Abbildung 6 zeigt die Ausgabe mit zwei Kommastellen.
Listing 3
#! /bin/bash #rechner.sh read -p " Erste Zahl: " a read -p "Rechenanweisung: " op read -p " Zweite Zahl: " b echo -n "$a $op $b ergibt "; spigot --rn -d50 \($a$op$b\) --printf %10.2f
Ergebnisse plotten
Wenn Sie das Berechnen des Schwingkreises etwas ergänzen, liefert das Skript sogar die nötigen Daten für ein Schaubild. Auf diese Weise ließen sich etwa abstimmbare Schwingkreise berechnen (Frequenzvariation durch Drehkondensator). Im Beispiel aus Listing 4 kommen außerdem die Kreiszahl (pi) und die Wurzelfunktion sqrt zum Einsatz.
Listing 4
#! /bin/bash #vfo.sh # Löschen evtl. vorhandener Ergebnistabelle rm ergtab.txt clear echo "Berechnung Abstimmbereich LC-Schwingkreis" echo "--------------------------------------------------" read -p " Spule: Induktivität in µH: " L read -p " Drehkondensator: höchster Wert in pF: " Cmax read -p "Drehkondensator: niedrigster Wert in pF: " Cmin # Cmin um 1 vermindern für for-Schleife Cmin=$(echo $Cmin | spigot 'base10fd:0-1') for (( C =Cmax; C > Cmin; C--)); do qrg=$(spigot --rn -d50 "$L"e-6*"$C"e-12 | spigot --rn -d50 '(1/(2pi*sqrt(base10fd:0))/1000000)' --printf %10.3f) echo "$C $qrg" >> ergtab.txt done gnuplot ergtab.plt evince ausgabe.eps
Die For-Schleife gibt je Durchgang den um 1 verminderten maximalen Wert für die Kapazität (Cmax) des Drehkondensators an, bis der Minimalwert (Cmin) erreicht ist. Die Ergebnisse (Werte für Kapazität und Frequenz) landen in einer Tabelle. Mittels Gnuplot [4] erstellen Sie das Diagramm als EPS-Datei, die Sie dann mit dem Programm Evince anzeigen. Abbildung 7 zeigt den Ablauf mit dem Ergebnis.

Abbildung 7: Mit Spigot berechnen Sie nicht nur Daten, sondern geben diese bei Bedarf auch als Plot wieder aus.
Um die Grafik etwas ansprechender zu gestalten, schreiben Sie die passenden Anweisungen in eine Datei mit der Endung .plt (Listing 5). Dorthin kommen Angaben zu den Achsen, zum Raster und zur Beschriftung sowie das Format für die Ausgabe (hier: eps).
Listing 5
set term eps set grid xtics mxtics ytics mytics linestyle 5 set sample 100000 set xtics 0,5 set mxtics 2 set ytics 0,1 set mytics 2 set xlabel "Kondensator (pF)" set ylabel "Frequenz (MHz)" set output "ausgabe.eps" plot "ergtab.txt" with lines title "Frequenz (MHz)"
Fazit
Bei Spigot handelt es sich um ein mächtiges Werkzeug zum Rechnen, obwohl manches am Bedienkonzept zunächst umständlich anmutet. Wenn Sie sich jedoch erst einmal mit den Eigenheiten vertraut gemacht haben, erledigen Sie selbst komplexe Rechenaufgaben im Handumdrehen per Skript.
Infos








