Skip to content

Commit 45d9248

Browse files
authored
Add conditions in german (#119)
1 parent c8939e7 commit 45d9248

File tree

2 files changed

+378
-0
lines changed

2 files changed

+378
-0
lines changed
Lines changed: 191 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,191 @@
1+
# Bash Bedingungs Ausdrücke
2+
3+
In der Informatik sind Bedingungen fundamentale Merkmale von Programmiersprachen, die verschiedene Berechnungen oder Aktionen durchführen,
4+
je nachdem, ob eine vom Programmierer festgelegte boolesche Bedingung als wahr oder falsch bewertet wird.
5+
6+
In Bash werden Bedingungen vom `[[` zusammengesetzten Befehl und den `[`eingebauten Befehlen verwendet, um Dateiattribute zu testen und String-
7+
und arithmetische Vergleiche durchzuführen.
8+
9+
Hier ist eine Liste der gängigsten Bedingungen in Bash. Sie müssen sie nicht auswendig lernen. Sie können einfach auf diese Liste zurückgreifen,
10+
wann immer Sie sie brauchen!
11+
12+
## Datei
13+
14+
* True, sofern die Datei existiert.
15+
16+
```bash
17+
[[ -a ${file} ]]
18+
```
19+
20+
* True, sofern die Datei existiert und eine spezielle Blockdatei ist.
21+
22+
```bash
23+
[[ -b ${file} ]]
24+
```
25+
26+
* True, sofern die Datei existiert und eine spezielle Zeichendatei ist.
27+
28+
```bash
29+
[[ -c ${file} ]]
30+
```
31+
32+
* True, sofern der Ordner existiert.
33+
34+
```bash
35+
[[ -d ${file} ]]
36+
```
37+
38+
* True, sofern die Datei existiert.
39+
40+
```bash
41+
[[ -e ${file} ]]
42+
```
43+
44+
* True, sofern die Datei existiert und eine reguläre Datei ist.
45+
46+
```bash
47+
[[ -f ${file} ]]
48+
```
49+
50+
* True, sofern die Datei existiert und ein symbolischer Link ist.
51+
52+
```bash
53+
[[ -h ${file} ]]
54+
```
55+
56+
* True, sofern die Datei existiert und lesbar ist.
57+
58+
```bash
59+
[[ -r ${file} ]]
60+
```
61+
62+
* True, sofern die Datei größer als 0 ist
63+
64+
```bash
65+
[[ -s ${file} ]]
66+
```
67+
68+
* True, sofern die Datei existiert und beschreibbar ist.
69+
70+
```bash
71+
[[ -w ${file} ]]
72+
```
73+
74+
* True, sofern die Datei existiert und ausführbar ist.
75+
76+
```bash
77+
[[ -x ${file} ]]
78+
```
79+
80+
* True, sofern die Datei existiert und ein symbolischer Link ist.
81+
82+
```bash
83+
[[ -L ${file} ]]
84+
```
85+
86+
## String ausdrücke
87+
88+
* True, sofern die shell Variable existiert
89+
90+
```bash
91+
[[ -v ${varname} ]]
92+
```
93+
94+
* True, sofern die Länge des Strings 0 ist.
95+
96+
```bash
97+
[[ -z ${string} ]]
98+
```
99+
100+
* True, sofern die Länge des Strings nicht 0 ist.
101+
102+
```bash
103+
[[ -n ${string} ]]
104+
```
105+
106+
* True if the strings are equal. `=` should be used with the test command for POSIX conformance. When used with the `[[` command, this performs pattern matching as described above (Compound Commands).
107+
108+
* True, sofern die String gleich sind. `=` sollte mit dem test Befehl für POSIX Konformität verwendet werden. Bei Verwendung mit dem Befehl `[[` wird der Mustervergleich wie oben beschrieben durchgeführt (Zusammengesetzte Befehle).
109+
110+
```bash
111+
[[ ${string1} == ${string2} ]]
112+
```
113+
114+
* True, sofern die Strings nicht gleich sind.
115+
116+
```bash
117+
[[ ${string1} != ${string2} ]]
118+
```
119+
120+
* True, sofern string1 vor string2 lexikografisch sortiert ist.
121+
122+
```bash
123+
[[ ${string1} < ${string2} ]]
124+
```
125+
126+
* True, sofern string1 nach string2 lexikografisch sortiert ist.
127+
128+
```bash
129+
[[ ${string1} > ${string2} ]]
130+
```
131+
132+
## Arithmetische Operatoren
133+
134+
* True, wenn die Zahlen **gleich** sind
135+
136+
```bash
137+
[[ ${arg1} -eq ${arg2} ]]
138+
```
139+
140+
* True, wenn die Zahlen **nicht gleich** sind
141+
142+
```bash
143+
[[ ${arg1} -ne ${arg2} ]]
144+
```
145+
146+
* True, wenn arg1 **kleiner als** arg2 ist
147+
148+
```bash
149+
[[ ${arg1} -lt ${arg2} ]]
150+
```
151+
152+
* True, wenn arg1 **kleiner oder gleich** arg2 ist
153+
154+
```bash
155+
[[ ${arg1} -le ${arg2} ]]
156+
```
157+
158+
* True, wenn arg1 **größer als** arg2´ist
159+
160+
```bash
161+
[[ ${arg1} -gt ${arg2} ]]
162+
```
163+
164+
* True, wenn arg1 **größer oder gleich** arg2 ist
165+
166+
```bash
167+
[[ ${arg1} -ge ${arg2} ]]
168+
```
169+
170+
Als Randnotiz, arg1 und arg2 können sowohl positiv als auch negativ sein.
171+
172+
Wie in anderen Programmiersprachen auch, kann man auch `AND` & `OR` verwenden
173+
174+
```bash
175+
[[ test_case_1 ]] && [[ test_case_2 ]] # Und/And
176+
[[ test_case_1 ]] || [[ test_case_2 ]] # Oder/Or
177+
```
178+
179+
## Exit status operatoren
180+
181+
* True, wenn der Befehl ohne erfolgreich ohne Fehler war
182+
183+
```bash
184+
[[ $? -eq 0 ]]
185+
```
186+
187+
* True, wenn der Befehl nicht erfolgreich war und Fehler aufwies
188+
189+
```bash
190+
[[ $? -gt 0 ]]
191+
```
Lines changed: 187 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,187 @@
1+
# Bash Bedingungen
2+
3+
Im letzten Abschnitt haben wir einige der gängigsten Bedingungs-Ausdrücke behandelt. Wir können sie nun mit Standard-Bedingungsanweisungen wie `if`, `if-else` und `switch case`-Anweisungen verwenden.
4+
5+
## If statement
6+
7+
Das Format einer "if"-Anweisung in Bash ist wie folgt:
8+
9+
```bash
10+
if [[ some_test ]]
11+
then
12+
<commands>
13+
fi
14+
```
15+
16+
Hier ist ein kurzes Beispiel, das Sie auffordert, Ihren Namen einzugeben, falls Sie ihn leer gelassen haben:
17+
18+
```bash
19+
#!/bin/bash
20+
21+
# Bash if statement beispiel
22+
23+
read -p "Wie heißt du? " name
24+
25+
if [[ -z ${name} ]]
26+
then
27+
echo "Bitte gebe deinen Namen ein!"
28+
fi
29+
```
30+
31+
## If Else statement
32+
33+
Mit einer `if-else`-Anweisung können Sie eine Aktion für den Fall angeben, dass die Bedingung in der `if`-Anweisung nicht erfüllt ist. Wir können dies mit den bedingten Ausdrücken aus dem vorherigen Abschnitt wie folgt kombinieren:
34+
35+
```bash
36+
#!/bin/bash
37+
38+
# Bash if statement example
39+
40+
read -p "Wie heißt du? " name
41+
42+
if [[ -z ${name} ]]
43+
then
44+
echo "Bitte gebe deinen Namen ein!"
45+
else
46+
echo "Hey ${name}"
47+
fi
48+
```
49+
50+
Sie können die obige if-Anweisung mit allen Bedinunges-Ausdrücken aus den vorherigen Kapiteln verwenden:
51+
52+
```bash
53+
#!/bin/bash
54+
55+
admin="devdojo"
56+
57+
read -p "Bitte gebe den Nutzernamen ein " username
58+
59+
# Überprüfen ob der eingegebene Benutzername der Administrator ist
60+
61+
if [[ "${username}" == "${admin}" ]] ; then
62+
echo "Du bist der Admin!"
63+
else
64+
echo "Du bist NICHT der Admin!"
65+
fi
66+
```
67+
68+
Hier ist ein weiteres Beispiel für eine `if `-Anweisung, die Ihre aktuelle `Benutzer-ID ` überprüft und Ihnen nicht erlaubt, das Skript als `root `-Benutzer auszuführen:
69+
70+
```bash
71+
#!/bin/bash
72+
73+
if (( $EUID == 0 )); then
74+
echo "Bitte führe das Skript nicht als root aus"
75+
exit
76+
fi
77+
```
78+
79+
Wenn Sie dies an den Anfang Ihres Skripts stellen, wird es beendet, wenn die EUID 0 ist, und führt den Rest des Skripts nicht aus. Dies wurde im [DigitalOcean-Community-Forum] (https://www.digitalocean.com/community/questions/how-to-check-if-running-as-root-in-a-bash-script) diskutiert.
80+
81+
Sie können auch mehrere Bedingungen mit einer `if`-Anweisung testen. In diesem Beispiel wollen wir sicherstellen, dass der Benutzer weder der Admin-Benutzer noch der Root-Benutzer ist, um sicherzustellen, dass das Skript nicht zu viel Schaden anrichten kann. In diesem Beispiel verwenden wir den Operator `oder`, gekennzeichnet durch `||`. Das bedeutet, dass eine der beiden Bedingungen wahr sein muss. Wenn wir den `und` Operator von `&&` verwenden würden, müssten beide Bedingungen wahr sein.
82+
83+
```bash
84+
#!/bin/bash
85+
86+
admin="devdojo"
87+
88+
read -p "Bitte gebe den Nutzernamen ein? " username
89+
90+
# Überprüfen ob der eingegebene Benutzername der Administrator ist
91+
92+
if [[ "${username}" != "${admin}" ]] || [[ $EUID != 0 ]] ; then
93+
echo "Du bist entweder nicht der Admin oder du bist der root Nutzer, bitte sicher bleiben"
94+
else
95+
echo "Du bist der Admin! Das könnte zerstörerisch werden"
96+
fi
97+
```
98+
99+
Wenn Sie mehrere Bedingungen und Szenarien haben, können Sie die `elif`-Anweisung mit `if`- und `else`-Anweisungen verwenden.
100+
101+
```bash
102+
#!/bin/bash
103+
104+
read -p "Gebe eine Zahl ein: " num
105+
106+
if [[ $num -gt 0 ]] ; then
107+
echo "Die Zahl ist positiv"
108+
elif [[ $num -lt 0 ]] ; then
109+
echo "Die Zahl ist negativ"
110+
else
111+
echo "Die Zahl ist 0"
112+
fi
113+
```
114+
115+
## Switch case statements
116+
117+
Wie in anderen Programmiersprachen können Sie eine `Case`-Anweisung verwenden, um komplexe Bedingungen zu vereinfachen, wenn es mehrere verschiedene Möglichkeiten gibt. Anstatt also mehrere `if`- und `if-else`-Anweisungen zu verwenden, können Sie eine einzige `case`-Anweisung benutzen.
118+
119+
Die Syntax der Bash `case`-Anweisung sieht wie folgt aus:
120+
121+
```bash
122+
case $some_variable in
123+
124+
pattern_1)
125+
commands
126+
;;
127+
128+
pattern_2| pattern_3)
129+
commands
130+
;;
131+
132+
*)
133+
default commands
134+
;;
135+
esac
136+
```
137+
138+
Ein kurzer Überblick über die Struktur:
139+
140+
* Alle `case`-Anweisungen beginnen mit dem Schlüsselwort `case`.
141+
* In derselben Zeile wie das Schlüsselwort "case" müssen Sie eine Variable oder einen Ausdruck angeben, gefolgt von dem Schlüsselwort `in`.
142+
* Danach folgen die `case`-Muster, wobei Sie mit `)` das Ende des Musters angeben müssen.
143+
* Sie können mehrere Muster angeben, die durch eine Pipe getrennt sind: `|`.
144+
* Nach dem Muster geben Sie die Befehle an, die ausgeführt werden sollen, wenn das Muster auf die angegebene Variable oder den Ausdruck passt.
145+
* Alle Klauseln müssen durch das Anfügen von `;;` am Ende abgeschlossen werden.
146+
* Sie können eine Standardanweisung haben, indem Sie ein `*` als Muster hinzufügen.
147+
* Um die `case`-Anweisung zu schließen, verwenden Sie das Schlüsselwort `esac` (case typed backwards).
148+
149+
Hier ist ein Beispiel für eine Bash `case`-Anweisung:
150+
151+
```bash
152+
#!/bin/bash
153+
154+
read -p "Gebe den Namen einer Automarke ein: " car
155+
156+
case $car in
157+
158+
Tesla)
159+
echo -n "${car}'s fabrik steht in der USA."
160+
;;
161+
162+
BMW | Mercedes | Audi | Porsche)
163+
echo -n "${car}' fabrik steht in Deutschland."
164+
;;
165+
166+
Toyota | Mazda | Mitsubishi | Subaru)
167+
echo -n "${car}'s fabrik steht in Japan."
168+
;;
169+
170+
*)
171+
echo -n "${car} ist keine uns bekannte Automarke"
172+
;;
173+
174+
esac
175+
```
176+
177+
In diesem Skript wird der Benutzer aufgefordert, den Namen einer Automarke wie Telsa, BMW, Mercedes usw. einzugeben.
178+
179+
Mit einer `Case`-Anweisung prüfen wir dann, ob der Markenname mit einem unserer Muster übereinstimmt, und wenn ja, geben wir den Standort der Fabrik aus.
180+
181+
Wenn der Markenname mit keiner unserer `case`-Anweisungen übereinstimmt, geben wir eine Standardmeldung aus: `eine unbekannte Automarke`.
182+
183+
## Zusammenfassung
184+
185+
Ich würde Ihnen raten, das Skript zu modifizieren und ein wenig damit zu spielen, damit Sie das, was Sie in den letzten beiden Kapiteln gelernt haben, üben können!
186+
187+
Weitere Beispiele für `case`-Anweisungen in der Bash finden Sie in Kapitel 16, in dem wir ein interaktives Menü in der Bash erstellen, das eine `cases`-Anweisung zur Verarbeitung der Benutzereingaben verwendet.

0 commit comments

Comments
 (0)