|
| 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