|
|
Die Bash ist kein Taschenrechner. Dennoch besitzt sie ein erstaunliches Potenzial an eingebauten Rechenoperationen, die -- nach Prioritäten geordnet -- nachfolgende Tabelle zusammenfasst:
| Operator | Bedeutung | |
| + - | Einstelliger Operator (Vorzeichen) | |
| ! ~ | Logische und bitweise Negation | |
| ** | Exponentialfunktion | |
| * / % | Multiplikation, Division und Modulo-Operator | |
| + - | Addition, Subtraktion | |
| << >> | Bitweise Links-/Rechtsverschiebung | |
| <= >= < > | Vergleiche | |
| == != | Gleichheit und Ungleichheit | |
| & | Bitweises UND | |
| ^ | Bitweises Exclusive ODER | |
| | | Bitweises ODER | |
| && | Logisches UND | |
| || | Logisches ODER | |
| expr ? expr : expr | Bedingte Zuweisung | |
| =, *=, /=, %=, +=, -= <<=, >>=, &=, ^=, |= | Zuweisungen |
Als Operanden sind Konstanten und Shellvariablen (deren Inhalt als long integer betrachtet wird) erlaubt.
Beginnt eine Konstante mit "0", dann wird sie als oktale Zahl verstanden; steht "0x" am Anfang, handelt es
sich um eine hexadezimale Konstante.
Konstanten können zu jeder Basis zwischen 2 und 64 angegeben werden, so kann die
Zahl 63 u.a. wie folgt dargestellt werden:
10#638#7716#3fDie so genannte arithmetische Substitution ist der gebräuchliche Weg, um Berechnungen durchzuführen:
$[...]$((...))Die neuen Bash-Versionen verstehen auch die alte Syntax; in den folgenden Beispielen wird aber nur die neuere Schreibweise verwendet.
user@sonne> b=5; b=$((b+1)); echo $b 6 user@sonne> a=$((b+=10)); echo $a 16 user@sonne> echo $(a>b?1:0) 1 user@sonne> echo $((8#17**2)) 225 user@sonne> echo $((017**2)) 225 user@sonne> echo $((-0x64*3#11%6)) -4 user@sonne> echo $((4<<1)) 8
Wird als Operand eine Variable benutzt, so wird versucht, deren Inhalt in eine Ganzzahl zu konvertieren. Enthält die Variable keine Zahl, wird der Inhalt zu "0" konvertiert:
user@sonne> b="Ist b keine Zahl, wird b zu 0 konvertiert" user@sonne> echo $b Ist b keine Zahl, wird b zu 0 konvertiert user@sonne> b=$(($b+1)); echo $b 1
Ein einfacher Weg zur Durchführung einer Berechnung ist die Verbindung einer Variablen mit einem bestimmten Typ:
user@sonne> declare -i a=3
Die Variable a ist eine Ganzzahl und wird mit 3 initialisiert.
Mit einer solchen typisierten Variablen lässt sich "ganz normal" rechnen:
user@sonne> a=a+3; echo $a 6 user@sonne> a=3**a; echo $a 729
Ohne die Typisierung bemühen zu müssen, kann man alternativ das builtin Kommando
let verwenden:
user@sonne> let y="8%2" user@sonne> echo $y 0
|
|