{{tag>linux}}
====== Navigation/Tastenkombinationen ======
^Kombination ^Bedeutung ^
|Strg+R|Revearse-Search in der History \\ \\
for //variable// in //Array//
do
Code;
done
\\ \\
* Variable: Variable die den jeweils aktuellen Wert zugewiesen bekommt (damit kann man innerhalb des for-Blocks dann arbeiten) -> nicht den Index
* Array: Das Array das durchlaufen werden soll bzw. Hashmap
\\ \\
**Beispiel:**
for myvalue in $myarray
do
echo "${myvalue}"
done
===== for-Zählschleife =====
* Geht nur ohne Variablen (mit festen Werten) direkt in Bash
Syntax:
for i in {x..y}; do
code;
done
Beispiel:
for i in {1..5}; do
Echo "Hallo"
done
Obiges Beispiel gibt 5 mal Hallo aus.
* Mit Variablen muss man das externe "seq" benutzen
Syntax:
for i in $(seq $a $b); do
code
done
Beispiel:
a=5
for i in $(seq 1 $a); do
echo "Hallo"
done
Obiges Beispiel gibt 5 mal Hallo aus
===== Programme aufrufen/ Andere Scripte aurufen =====
Syntax: //Rückgabevariable//=$(//Befehl//) \\ \\
* Rückgabevariable -> optionale Variable die alles speichert was der Befehl auf stdout ausgibt -> in der Regel das was der Befehl zurückgibt
* Mehrere Zeilen werden hintereinander durch Leerzeichen getrennt übergeben (also nicht als mehrere Zeilen)
* per $? kann abgefragt werden was der Rückgabewert war (nicht die Ausgaben, sondern der Return-Wert)
====== Variablen ======
====== Arrays =====
* Können Deklariert werden
* declare -a Arrayname
* += Fügt einen weiteren Wert dem Array hinzu (Bla+=Test)
===== Associative Arrays/Hash-Maps =====
* Verfügbar ab Bash-Version 4
* Funktionieren wie Arrays, nur das der Index ein Name ist
* Müssen deklariert werden
Beispiel: a=${namen[Anna]
\\
Würde den Wert im Array name zurückliefern (in die Variable a), der im Feld Anna steht (zum Beipsiel den Nachnahmen von Anna).
**Deklaration:**
declare -A Hasmap-Name
* += Fügt ein weiteres Argument-Wert-Paar dem Array hinzu
===== Multidimensionale Arrays =====
* Verfügbar ab Bash Version 4
* Deklaration wie normale Arrays -> declare -a //Arrayname// bzw. eben gar nicht
\\
**Zugriff**: ${//Arrayname//[Index1,Index2]} \\ \\
**Beispiel**: ${Namen[0,1]} \\ \\
**Achtung:** Gemischte multidimensionale Arrays (in denen ein Index ein String und der andere eine Zahl ist) scheinen zwar keine Fehler-Ausgaben zu produzieren, aber auch nicht zu funktionieren (beim Auslesen wird immer das ausgegeben was im ersten Feldhinterlegt ist).
====== Operatoren ======
^Operator ^Erklärung ^
|-eq|Vergleich zweier arithemtischer (numerischer) Werte auf Gleichheit \\ \\ Syntax: $a -eq $b|
|-ne|Vergleich zweier arithemtischer (numerischer) Werte auf Ungleichheit \\ \\ Syntax: $a -ne $b|
|-z|Prüfung eines Strings ob dessen Länge 0 ist (String ist leer). \\ \\ Syntax: -z "${a} \\ \\ **Achtung:**Die Variable muss in "" stehen, weil sonst die 0-Länge nicht zuverlässig ermittelt wird (wahrscheinlich wird nur geprüft ob zwischen den "" etwas steht oder nicht)|
|-n| Prüfen eines Strings auf Länge größer 0 (String hat Inhalt) \\ \\ Syntax: -n "$a" \\ \\ **Achtung:**Die Variable muss in "" stehen, weil sonst die Länge nicht unbedingt korrekt ermittelt wird.|
====== Anführungszeichen und Single-Quotes ======
* Zeichenketten in '
und "
verhindern/erlauben das expandieren (Steuerbefehle und Variablennamen werden entsprechend ersetzt/interpretiert) von Variablennamen und Steuerbefehlen
*
"-> expandiert die Zeichenkette (interpretiert sie) *
'
-> expandiert die Zeichenkette nicht, sondern nimmt sie so wie sie da steht (literal, wörtlich)