Conditionals

Deklaration

if [[ <expression> ]];
then
    <body>
elif [[ <expression> ]];
then
    <body>
fi

[[ ist eigentlich ein Programm, dass je nachdem 0 (true) oder 1 (false) zurückgibt und ]] als letztes Argument erwartet
Achtung: if [[ 0 ]]; ist true!

Expressions und Flags

Strings

[[ -z <string> ]] # Leerer String
[[ -n <string> ]] # Nicht-leerer String
[[ <stringA> == <stringB> ]] # Gleiche Strings
[[ <stringA> != <stringB> ]] # Ungleiche Strings
[[ <stringA> =~ <Regexp> ]] # StringA Match auf Regexp (ohne '/')

Nummern

[[ <numberA> -eq <numberB> ]] # Gleiche Nummern
[[ <numberA> -ne <numberB> ]] # Ungleiche Nummern
[[ <numberA> -lt <numberB> ]] # NumberA < NumberB
[[ <numberA> -le <numberB> ]] # NumberA <= NumberB
[[ <numberA> -gt <numberB> ]] # NumberA > NumberB
[[ <numberA> -ge <numberB> ]] # NumberA >= NumberB
# Alternative mit (()):
(( <number> < <number> ))

Dateien

[[ -e <file> ]] # File existiert
[[ -r <file> ]] # File ist lesbar
[[ -w <file> ]] # File ist schreibbar
[[ -x <file> ]] # File ist ausführbar
[[ -h <file> ]] # File ist ein Symlink
[[ -d <file> ]] # File ist ein Directory
[[ -s <file> ]] # File ist > 0 bytes
[[ -f <file> ]] # File ist eine File
[[ <fileA> -nt <fileB> ]] # FileA ist neuer als FileB
[[ <fileA> -ot <fileB> ]] # FileA ist älter als FileB
[[ <fileA> -ef <fileB> ]] # FileA und FileB sind die selbe Datei

Bei allen Vergleichen sind, wie gewohnt, Kombinationen mit && und ||, sowie negieren mit ! (Achtung: Leerzeichen!) möglich

Conditional Execution

  • <command> && <command>
    • Nur wenn erster Command erfolgreich
  • <command> || <command>
    • Nur wenn erster Command nicht erfolgreich

Aufgabe 5 - Schaltjahr

Erstelle ein Bash-Script, welches die Eingabe einer Jahreszahl vom Benutzer verlangt.
Gib dann aus, ob es sich um ein Schaltjahr handelt, oder nicht.

Schreibe in einem Kommentar unter die Nutzereingabe den Code für die Annahme des Jahres als erstes Argument.

Tipp:
Schaltjahre sind Jahre, die durch 4 teilbar, nicht aber durch 100 oder durch 400 teilbar sind.
2000 war zum Beispiel ein Schaltjahr, da es durch 400 teilbar ist.
2100 wird kein Schaltjahr sein, da es zwar durch 4, aber nicht durch 100 teilbar ist.

Aufgabe 6 - Update

Erstelle ein Bash-Script, welches deine Programme mit brew auf den neuesten Stand bringt und, falls etwas schiefgegangen ist, eine Nachricht ausgibt.
Nutze hierzu Conditional Execution. So wird das ganze zu einem One-Liner :)

Tipps:

  • brew update schaut nach, ob es neue Versionen gibt
  • brew upgrade upgraded deine Programme
  • brew autoremove entfernt überschüssiges Zeugs