===== Operatoren =====
Internal reference: topics/02-2.md
\\
==== Einleitung ====
Folgende Operator-Typen gibt es:
* Arithmetische Operatoren
* String Operatoren
* Relational Operatoren
* Boolean Operatoren
* File Test Operatoren
\\
==== Arithmetische Operatoren (Integer) ====
**Nur simple arithmetische Ganzzahl-Berechnungen** können mit der Shell berechnet werden. (Fliesskommazahlen nur mit dem Pipe-Tool ''bc''.)
Es gibt in der Bash drei Varianten, um einen arithmetischen Ausdruck zu berechnen:
- ''var=$(( Int-Arithmetik ))''
- ''var=$[ Int-Arithmetik ]''
Die wichtigsten Operatoren sind:
| Operation | Erklärung |
| a + b | Addition (a plus b) |
| a - b | Substraction (a minus b) |
| a * b | Multiplication (a mal b) |
| a / b | Division (Ganzzahl) (a geteilt durch b) |
| a % b | modulo (der Ganzzahlrest von a geteilt durch b) |
| a * * b | Potenz (a hoch b) |
\\
=== Beispiel ===
$ diff=$(( 100/5 ))
$ echo $diff
20
\\
==== String-Operatoren ====
\\
=== String-Länge ermitteln ===
STRING=das ist ein String
echo ${#STRING} # 18
\\
=== Index ===
Finde die numerische Position in ''$STRING'' irgendeines Zeichens in ''$SUBSTRING''. Beachte, dass der ''expr'' Befehl benutzt wird.
STRING=das ist ein String
SUBSTRING=asd
expr index $STRING $SUBSTRING # 1 ist die Position des ersten 'd' in $STRING
\\
=== Substring Extraktion ===
Extrahiere einen Substring der Länge ''$LEN'' von ''$POS'' ausgehend aus ''$STRING''. Beachte, dass der erste Buchstabe der 0.te ist.
STRING=das ist ein String
POS=4
LEN=3
echo ${STRING:$POS:$LEN} # ist
Wenn ''$LEN'' weggelassen wird, wird der Substring von ''$POS'' bis zum Ende der Zeile extrahiert.
STRING=das ist ein String
echo ${STRING:1} # $STRING Inhalt, ohne das erste Zeichen
echo ${STRING:14} # ring
\\
==== Beispiel Datenextraktion ====
# Code um den Vornamen des Datensatzes zu extrahieren
DATARECORD=last=Clifford,first=Johnny Boy,state=CA
COMMA1=$(expr index $DATARECORD ',') # 14 position of first comma
CHOP1FIELD=${DATARECORD:$COMMA1} #
COMMA2=$(expr index $CHOP1FIELD ',')
LENGTH=$(expr $COMMA2 - 6 - 1)
FIRSTNAME=${CHOP1FIELD:6:$LENGTH} # Johnny Boy
echo $FIRSTNAME
\\
==== Substring ersetzen ====
STRING=sein oder nicht sein
Ersetze das erste Vorkommen des Substrings
STRING=sein oder nicht sein
echo ${STRING[@]/sein/essen} # essen oder nicht sein
Ersetze alle Vorkommen des Substrings
STRING=to be or not to be
echo ${STRING[@]//sein/essen} # essen oder nicht essen
Lösche alle Vorkommen des Substrings (mit einem leeren String ersetzen)
STRING=sein oder nicht sein
echo ${STRING[@]// nicht/} # sein oder sein
Ersetze den Substring, wenn er am Anfang des ''$STRING''s ist
STRING=sein oder nicht sein
echo ${STRING[@]/#sein/jetzt essen} # jetzt essen oder nicht sein
Ersetze den Substring, wenn er am Ende des ''$STRING''s ist
STRING=sein oder nicht sein
echo ${STRING[@]/%sein/essen} # sein oder nicht essen
Ersetze den Substring, mit der Ausgabe eines Shellbefehls
STRING=sein oder nicht sein
echo ${STRING[@]/%sein/sein am $(date +%Y-%m-%d)} # sein oder nicht sein am 20xx-xx-xx
----
[[https://creativecommons.org/licenses/by-nc-sa/4.0/|{{https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png}}]] Daniel Garavaldi