11.3 Rechnen in der Shell 

Rechnen kann man in der Shell auf verschiedene Weisen. Man kann über ein awk-Skript, über eine Pipe mit dem bc, via expr oder über Integer-Variablen eine Berechnung ausführen lassen. Den awk-Interpreter und den bc kennen Sie ja bereits. Nun werden wir uns mit expr und Integer-Variablen beschäftigen.
11.3.1 Integer-Variablen 

typeset -i
Integer-Variablen können Sie in der Bourne-Again-, Korn- und Z-Shell über das Kommando typeset -i angelegen. Anschließend können Sie durch erneute Wertzuweisung mit einer Variable rechnen. Möglich sind dabei nicht nur Addition, Subtraktion, Division (allerdings ohne Kommastellen!), Multiplikation und Modulo, sondern auch das aus C bekannte Bit-Shiften durch »n und «n sowie ein bitweises UND (&), ODER (|), XOR (^) und Negieren (~). Außerdem möglich sind die ebenfalls aus awk und C bekannten Abkürzungsoperatoren wie +=, -= oder ^=.
$ typeset -i zahl $ zahl=301*2 $ echo $zahl 602 $ zahl=$zahl+1 $ zahl=$zahl/3 $ echo $zahl 201 $ zahl=8\<\<3 1024
Listing 11.7 typeset -i anwenden
Um einer Variablen einen Wert zuzuweisen, benutzt man nur den Namen der Variablen. Will man dagegen auf den Wert einer Variablen zugreifen, muss man dem Variablennamen ein Dollarzeichen ($) voranstellen.
Achten Sie außerdem immer darauf, Sonderzeichen wie ( oder > in Ihren Rechnungen durch einen Backslash vor der Interpretation durch die Shell zu schützen. Eine bloße Klammerung würde beispielsweise als Subshell und ein > als Ausgabeumlenkung interpretiert werden.
let
Eine weitere Möglichkeit, mit Integer-Variablen zu arbeiten, ist die Nutzung des let-Befehls in der Form
$ let x=37+13
$ echo $x
50
Listing 11.8 Der Befehl let
sowie die Verwendung einer doppelten Klammerung für eine Rechnung
$ ((produkt=37*13))
$ echo $produkt
481
Listing 11.9 (( ... ))
und die Verwendung eckiger Klammern in bash und zsh:
$ z=$[13*37]
$ echo $z
481
Listing 11.10 Eckige Klammern
11.3.2 expr 

Eine Möglichkeit, die in jeder Shell funktioniert, um Rechnungen durchzuführen, ist expr. Dem Programm wird dabei die entsprechende Rechnung übergeben. Die Ausgabe erfolgt entweder über die Standardausgabe oder man weist das Ergebnis durch eine Kommandosubstitution einer Variablen zu.
$ expr 13 + 37
$ ergebnis=`expr 13 + 37`
$ echo $ergebnis
50
Listing 11.11 Das Programm expr
11.3.3 Den bc nutzen 

Den Konsolenrechner bc kennen Sie ja bereits aus Abschnitt 9.10.1. Er stellt einige zusätzliche Rechenfunktionen bereit, die in der reinen Shellskriptprogrammierung nicht möglich sind, etwa die Berechnung von Kommawerten. Wenn man solche Aufgaben lösen muss, kann man ganz einfach den bc in eine Berechnung einbinden, was folgendermaßen geschrieben wird:
$ echo "scale=5; 31.2/494" | bc .06315 $ ergebnis=`echo "scale=5; 31.2/494" | bc` $ echo $ergebnis .06315
Listing 11.12 bc und Shellvariablen