Shell-Workshop, Teil 3

© Womue, Fotolia

Ordnung schaffen

Kleine Shell-Tools helfen in vielen Alltagssituationen. Unser Kurs stellt die wichtigsten Kommandos vor.

Shell-Kurs

Teil 1

RPG 03-04/2017, S. 12

http://www.raspi-geek.de/38327

Teil 2

RPG 05-06/2017, S. 10

http://www.raspi-geek.de/38865

Shell-Skripte übernehmen nicht nur Aufgaben, die sich auf die Arbeit mit Dateien oder Datenströmen beziehen. Sie bieten darüber hinaus die Möglichkeit, Berechnungen anzustellen und so Werte arithmetisch zu verarbeiten.

Die grundlegenden Rechenarten stehen über einfache Operatoren bereit. Dabei steht das Pluszeichen + für die Addition, das Minus - für die Subtraktion, der Asterisk * für die Multiplikation und der Schrägstrich / für die Division.

Operationen mit ganzen Zahlen erfordern es, dass Sie den Ausdruck in doppelte Klammern setzen. Es gelten die Regeln "Klammern zuerst" und "Punkt-vor-Strich" (Listing 1).

Listing 1

 

#!/bin/bash
a=2
b=3
# Ergebnis sofort Variablen zuweisen
c=$(( 2 + 8 ))
echo $c
echo $(( $a * $a ))
echo $(( $c / 5 ))
echo $(( $a - $c ))

Berechnungen mit Bc

Genaue Berechnungen, selbst mit 1000 Nachkommastellen, ermöglicht das Kommandozeilen-Tool Bc. Dabei geben Sie die Anzahl der zu berücksichtigenden Nachkommastellen über die Anweisung scale=Anzahl vor.

Neben den vier Grundrechenarten beherrscht das Programm unter anderem auch die Anweisung sqrt(Wert) zum Berechnen der Quadratwurzel. Mit den Angaben ibase=Zahl beziehungsweise obase=Zahl wählen Sie das Zahlensystem (dual, dezimal, oktal, sedezimal) für die Ein- respektive Ausgabe.

Bc verfügt über einen interaktiven Modus, es eignet sich aber auch für Skripte. Wie in der Shell trennen Sie auch im interaktiven Betrieb die Kommandos mittels Semikolon (;) voneinander ab. Ergibt das Ergebnis keine führende Stelle vor dem Komma, so gibt das Tool keine führende Null aus. Das gilt es beim weiteren Verarbeiten unter Umständen zu berücksichtigen. Listing 2 zeigt einige Berechnungen.

Listing 2

 

#!/bin/bash
a=100
b=0
c=0
# Summen und Differenzen
for i in 20.32 -49.57 81.62; do
  b=$(echo "$b + $i" | bc)
  c=$(echo "$c - $a - $i" | bc)
done
echo $b
echo $c
# Multiplikation mit Rundung
h=$(echo "scale=50;45.48 * 0.458" | bc)
echo "ungerundetes Ergebnis: $h"
# Bc kürzt auf drei Nachkommastellen
echo -n "Auf drei Nachkommastellen abgeschnitten: ";
echo "scale=3;45.48 * 0.458" | bc
# aber mit Rundung durch printf:
printf "Ausgabe $h mit 'printf': %10.3f \n" $h
# Division, Vor- und Nachkommastellen setzen
for i in -639/852 -852/639 639/852 852/639; do
  m=$(echo "scale=10;$i" | bc)
  # Printf setzt fehlende Null bei der Ausgabe
  echo -n "Ausgabe bc: $m   ";
  printf "Ausgabe mit 'printf': %10.2f \n" $m
done
# Quadratwurzel
printf "Wurzel aus 99, fünfstellig: %10.5f \n" $(echo "scale=50;sqrt(99)" | bc)

Funktionen und Berechnungen

Das Shell-Skript aus Listing 3 zeigt das Zusammenspiel von Funktionen und Berechnungen, als Ergebnis liefert es eine Tabelle zurück. Jede Zeile enthält dabei Prozentwerte zur Basis 125, beginnend mit 1 und endend mit 20 Prozent. Anschließend gibt das Skript das Wort Fertig aus.

Dabei gibt es noch zwei Besonderheiten: Die Schleife zum Berechnen der Werte steht in einer Funktion (siehe Teil 2 dieses Workshops). Jede Zeile enthält neben dem Prozentsatz den eigentlichen Wert. Dabei kommt Printf zum Einsatz, das ebenfalls im letzten Teil des Workshops Thema war.

Listing 3

 

#!/bin/bash
a=125
n=0
prozenttabelle () {
  while true; do
    n=$(( $n + 1 ))
    printf "Ergebnis für $n v.H.: %10.2f \n" $(echo "scale=50;$a/100*$n" | bc)
    if [ $n -eq 20 ]; then
      break
    fi
  done
}
prozenttabelle
echo "Fertig"

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 6 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

Raspberry Pi Geek kaufen

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

Deutschland

Ähnliche Artikel

Aktuelle Ausgabe

12/2019
RasPi-Alternativen

Diese Ausgabe als PDF kaufen

Preis € 9,99
(inkl. 19% MwSt.)

Stellenmarkt

Neuigkeiten

  • Grußbotschaften

    Mit Sonic Pi zaubern Sie komplexe Sounds, die Sie bei Bedarf sogar noch während des Abspielens modifizieren.

  • Das Runde und das Eckige

    Mit dem MCP4725 ergänzen Sie einen RasPi um einem D/A-Wandler, der bei Bedarf noch weitere Funktionen erfüllt.

  • Alles unter Kontrolle

    Schon ein einfaches Mikrocontrollerboard wie das CY8CKIT-049-42xx bietet erstaunlich viele Möglichkeiten beim Ansteuern von Hardware.

  • Viele Kerne

    Das Spresense Development Board von Sony lässt sich mit der Arduino IDE programmieren und bringt auch ein eigenes Entwickler-SDK mit.

  • Exotische Früchte

    Der aus China stammende Orange Pi positioniert sich mit einem guten Preis und interessanten Features gegen die RasPi-Truppe. Kann er sich auch behaupten?

  • Flexibler Surfer

    Mit dem neuen RasPi 4 setzen Sie einen öffentlichen Webkiosk schnell und kostengünstig auf.

  • Auskunftsfreudig

    Viele Devices, so auch der E.ON-Aura-Controller, verwenden eine Schnittstelle namens REST, um Zustandsdaten zu übermitteln. Mit ein wenig Bastelei lesen Sie diese auch über Ihr Smartphone aus.

  • Doppelt gemessen

    Mit wenig Aufwand und einem Pi Zero realisieren Sie einen mobilen Zweikanal-Spannungsprüfer.

  • Elegant zusammengeführt

    Tizonia streamt Musik von Online-Quellen und lokalen Sammlungen. Die schlanke Architektur macht den Player zur guten Wahl für den Einsatz auf dem RasPi.

  • Kommunikativ

    Nicht jeder traut sich zu, sein eigenes Smartphone zu bauen. Allerdings kann jeder Linux-Nutzer den Raspberry Pi im Handumdrehen zu einem VoIP-Telefon aufrüsten.