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=$1)
- 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 $STRINGs ist
STRING=sein oder nicht sein
echo ${STRING[@]/#sein/jetzt essen} # jetzt essen oder nicht sein
Ersetze den Substring, wenn er am Ende des $STRINGs 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
