![]() ![]() ![]() |
![]() ![]() |
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#63
8#77
16#3f
Die 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
|
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"
|
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
|
Ohne die Typisierung bemühen zu müssen, kann man alternativ das builtin Kommando
let
verwenden:
user@sonne> let y="8%2"
|
![]() ![]() ![]() |
![]() ![]() |