Shell Scripting · 7 min read · Nov 13, 2025

Shell-Skripting Teil 3: Entscheidungssteuerungsstrukturen in Shell-Skripten

Hi! Wir haben bereits die Grundlagen des Shell-Skriptings behandelt, wie das Akzeptieren von Eingaben, das Verarbeiten von Daten durch arithmetische Operationen und das Generieren und Anzeigen von Ausgaben in den vorherigen Teilen dieses Tutorials (Teil 1 und Teil 2). In diesem Teil werden wir tiefer in ein fortgeschritteneres Thema einer Programmiersprache eintauchen – Entscheidungen in einem Programm zu treffen, aber diesmal werden wir es mit der Bash-Shell tun. Lass uns anfangen!

Einführung

Die meisten unserer heutigen Programmiersprachen sind in der Lage, Entscheidungen basierend auf Bedingungen zu treffen, die wir festlegen. Eine Bedingung ist ein Ausdruck, der zu einem booleschen Wert evaluiert – wahr oder falsch. Jeder Programmierer kann sein Programm intelligent gestalten, basierend auf den Entscheidungen und der Logik, die er in sein Programm einfügt. Die Bash-Shell unterstützt if- und switch (case)-Entscheidungsanweisungen.

If-Anweisung

If ist eine Anweisung, die es dem Programmierer ermöglicht, eine Entscheidung im Programm basierend auf den von ihm festgelegten Bedingungen zu treffen. Wenn die Bedingung erfüllt ist, wird das Programm bestimmte Codezeilen ausführen, andernfalls wird das Programm andere Aufgaben ausführen, die der Programmierer festgelegt hat. Die folgende Syntax wird in der Bash-Shell unterstützt.

Allgemeine Syntax

Einfache Entscheidung:

if   
 then  
     ### Reihe von Code kommt hierhin  
 fi

Doppelte Entscheidung:

if   
 then  
     ### Reihe von Code, wenn die Bedingung erfüllt ist  
 else  
     ### Reihe von Code, wenn die Bedingung nicht erfüllt ist  
 fi

Mehrfache if-Bedingung:

if   
 then  
     ### Reihe von Code für condition1  
 elif   
 then  
     ### Reihe von Code für condition2  
 else  
     ### Reihe von Code, wenn die Bedingung nicht erfüllt ist  
 fi

Einzelklammer-Syntax

if [ condition ]  
 then  
     ### Reihe von Code kommt hierhin  
 fi

Doppelte Klammer-Syntax

if ((condition))  
 then  
     ### Reihe von Code kommt hierhin  
 fi

Die Einzelklammer-Syntax ist die älteste unterstützte Syntax in der Bash-Shell. Sie wird zusammen mit allen bedingten Anweisungen in Linux verwendet. In der Zwischenzeit wird die doppelte Klammer-Syntax für eine zahlenbasierte bedingte Anweisung verwendet, um Programmierern eine vertraute Syntax zu bieten. Alle Arten von if-Anweisungen benötigen eine festgelegte Bedingung, um eine Aufgabe auszuführen.

Bedingte Anweisungen in Linux

Bedingte Anweisungen werden zusammen mit einer Entscheidungssteuerungsanweisung verwendet. Es gibt verschiedene Arten von bedingten Anweisungen, die Sie in der Bash-Shell verwenden können, die häufigsten sind: dateibasiert, stringbasiert und arithmetisch-basiert.

Dateibasierte Bedingung

Dateibasierte Bedingungen sind unäre Ausdrücke und werden häufig verwendet, um den Status einer Datei zu überprüfen. Die folgende Liste zeigt die am häufigsten verwendeten dateibasierten Bedingungen in der Bash-Shell.

OperatorBeschreibung
-a fileGibt wahr zurück, wenn die Datei existiert
-b fileGibt wahr zurück, wenn die Datei existiert und eine Block-Sonderdatei ist
-c fileGibt wahr zurück, wenn die Datei existiert und eine Zeichen-Sonderdatei ist
-d fileGibt wahr zurück, wenn die Datei existiert und ein Verzeichnis ist
-e fileGibt wahr zurück, wenn die Datei existiert
-r fileGibt wahr zurück, wenn die Datei existiert und lesbar ist
-s fileGibt wahr zurück, wenn die Datei existiert und eine Größe größer als null hat
-s fileGibt wahr zurück, wenn die Datei existiert und eine Größe größer als null hat
-w fileGibt wahr zurück, wenn die Datei existiert und beschreibbar ist
-x fileGibt wahr zurück, wenn die Datei existiert und ausführbar ist
-N fileGibt wahr zurück, wenn die Datei existiert und seit dem letzten Lesen geändert wurde

Eine dateibasierte Entscheidung treffen

Lass uns ein Beispiel betrachten, das veranschaulicht, wie man eine dateibasierte Entscheidung in einem Bash-Skript konstruiert. In diesem Beispiel werden wir ein Skript erstellen, das bestimmt, ob die Datei im Home-Verzeichnis existiert.

#!/bin/bash  
   
cd   
 ls  
 if [ -e sample.sh ]   
 then   
     echo "Datei existiert!"   
 else   
     echo "Datei existiert nicht"   
 fi

Eine dateibasierte Entscheidung treffen

In diesem Beispiel haben wir sichergestellt, dass die Shell zum Home-Verzeichnis zurückkehrt, unabhängig von unserem aktuellen aktiven Verzeichnis, indem wir den cd-Befehl verwenden. Zusätzlich wird der ls-Befehl verwendet, um die Liste der Dateien im Verzeichnis anzuzeigen, damit wir überprüfen können, ob die Datei wirklich existiert oder nicht. Wie Sie sehen können, gibt das Skript den Text “Datei existiert!” aus, weil sich die sample.sh im Home-Verzeichnis befindet.

Hinweis: Der Shell-Compiler ist in Bezug auf die Syntax, insbesondere bei Leerzeichen, sehr streng. Es sollte ein Leerzeichen zwischen if und der öffnenden Klammer und zwischen den Klammern und der Bedingung geben.

Jetzt lass uns unser Skript verbessern, indem wir unseren Code dynamischer gestalten, indem wir dem Benutzer erlauben, einen Dateinamen einzugeben und die Berechtigungen der angegebenen Datei zu bestimmen.

#!/bin/bash  
   
cd  
 ls -l   
 read -p "Geben Sie einen Dateinamen ein: " filename  
 if [ -e $filename ]   
 then   
     echo "Datei existiert!"   
     if [ -r $filename ]  
     then   
          status="lesbar "   
     fi   
     if [ -w $filename ]   
     then   
          status=$status"beschreibbar "   
     fi   
     if [ -x $filename ]   
     then   
          status=$status"ausführbar"   
     fi   
      echo "Dateiberechtigung: "$status   
 else   
     echo "Datei existiert nicht"   
 fi

Eine dynamische dateibasierte Entscheidung treffen

String-basierte Bedingung

Entscheidungen basierend auf einer vom Benutzer eingegebenen Zeichenfolge sind ebenfalls in der Bash-Shell möglich. Die stringbasierte Bedingung gibt einen binären Ausdruck als Ergebnis zurück, was bedeutet, dass sie wahr zurückgibt, wenn die angegebene Bedingung erfüllt ist, andernfalls gibt sie falsch zurück. Die folgenden sind die häufig verwendeten stringbasierten bedingten Operatoren:

OperatorBeschreibung
==Gibt wahr zurück, wenn die Zeichenfolgen gleich sind
!=Gibt wahr zurück, wenn die Zeichenfolgen nicht gleich sind
-nGibt wahr zurück, wenn die zu testende Zeichenfolge nicht null ist
-zGibt wahr zurück, wenn die zu testende Zeichenfolge null ist

Lass uns ein Beispielskript erstellen, das eine stringbasierte bedingte Anweisung verwendet. Das Skript ermöglicht es dem Benutzer, zwei Zeichenfolgen einzugeben und zu überprüfen, ob eine der Zeichenfolgen null ist, ob beide Zeichenfolgen gleich oder ungleich sind.

#!/bin/bash   
   
read -p "Erste Zeichenfolge: " str1   
 read -p "Zweite Zeichenfolge: " str2   
 if [ -z "$str1" ]   
 then   
     echo "Die 1. Zeichenfolge ist null"   
 elif [ -z "$str2" ]   
 then   
     echo "Die 2. Zeichenfolge ist null"   
 else   
     if [ $str1 == $str2 ]   
     then   
          echo "Die Zeichenfolgen sind gleich"   
     else   
         echo "Die Zeichenfolgen sind nicht gleich"   
     fi   
 fi

String-basierte bedingte Anweisung

Arithmetisch-basierte Bedingung

Die Shell bietet mehrere Möglichkeiten, eine arithmetisch-basierte Bedingung zu deklarieren. Zuerst ist es durch die Verwendung von Mnemoniken, die zusammen mit der alten Einzelklammer-Syntax verwendet werden können, und die andere ist die Verwendung von mathematisch freundlichen Symbolen, die zusammen mit der doppelten Klammer verwendet werden können.

Unten ist die Liste der verfügbaren Mnemoniken für arithmetisch-basierte bedingte Anweisungen in der Shell:

OperatorVerwendung/Beschreibung
-eqGleich
-geGrößer als oder gleich
-gtGrößer als
-leKleiner als oder gleich
-ltKleiner als
-neNicht gleich

Lass uns ein Skript erstellen, das eine ganze Zahl vom Benutzer akzeptiert und bestimmt, ob die ganze Zahl null, negativ, ungerade oder eine gerade Zahl ist.

#!/bin/bash   
   
read -p "Geben Sie eine ganze Zahl ein: " int1   
 if [ $int1 -eq 0 ]   
 then   
     echo "Null"   
 elif [ $int1 -lt 0 ]   
 then   
     echo "Negativ"   
 else   
     if [ $((int1%2)) -eq 0 ]   
     then   
         echo "Gerade"   
     else   
         echo "Ungerade"   
     fi   
 fi

Arithmetisch-basierte bedingte Anweisung

Arithmetischer Operator für die doppelte Klammer-Syntax:

OperatorVerwendung/Beschreibung
==Gleich
>=Größer als oder gleich
>Größer als
<=Kleiner als oder gleich
<Kleiner als
!=Nicht gleich

Jetzt lass uns unser vorheriges Skript umstrukturieren und die doppelte Klammer-Syntax verwenden:

#!/bin/bash  
  
read -p "Geben Sie eine ganze Zahl ein: " int1   
 if (( $int1 == 0 ))   
 then   
     echo "Null"   
 elif (( $int1 < 0 ))   
 then   
     echo "Negativ"   
 else   
     if (( $((int1%2)) == 0 ))   
     then   
         echo "Gerade"   
     else   
         echo "Ungerade"   
     fi   
 fi

Arithmetischer basierter Operator

Switch-Anweisung

Die Switch-Anweisung ist eine andere Art von bedingter Anweisung im Shell-Skripting. Sie ermöglicht es einem Programmierer, mehrere Werte mit einer Variablen zu vergleichen, was einfacher ist als die if-bedingte Anweisung. Die Syntax für die Switch-Anweisung lautet:

 case  in  
 )  
     ##Reihe von Code für pattern1  
     ;;  
 )  
     ##Reihe von Code für pattern2  
     ;;  
 )  
     ##Reihe von Code für patternN  
     ;;  
 *)   
     ##Standardanweisungen  
 esac  
 

Das Muster ist der mögliche Wert der Variablen. Jedes Muster ist durch ein doppeltes Semikolon getrennt, das als Break-Anweisung des Musters dient. Die Switch-Anweisung wird mit einer esac-Anweisung geschlossen.

#!/bin/bash   
 clear   
 read -p "Integer1: " int1   
 read -p "Integer2: " int2   
 echo "======================"   
 printf "Menü: \n[a] Addition\n[b]Subtraktion\n[c]Multiplikation\n[d]Division\n"   
 echo "======================"   
 read -p "Ihre Wahl: " choice   
 res=0   
 case $choice in   
 a)   
     res=$((int1+int2))   
 ;;   
 b)   
     res=$((int1-int2))   
 ;;   
 c)   
     res=$((int1*int2))   
 ;;   
 d)   
     res=$((int1/int2))   
 ;;   
 *)   
     echo "Ungültige Eingabe"   
 esac   
 echo "Das Ergebnis ist: " $res

Switch-Anweisung in Linux

Fazit

Die Bash-Shell bietet viele nützliche Werkzeuge für Programmierer. Wie die meisten Programmiersprachen heute ist sie auch in der Lage, bedingte Entscheidungen zu treffen, die Shell-Skripte interaktiver und intelligenter machen. In der nächsten Serie werden wir die wiederholenden Steuerstrukturen behandeln. Bis zum nächsten Mal.

Referenzen

Die nächste Lektion: Wiederholungssteuerungsstrukturen

Share: X/Twitter LinkedIn

Erhalte neue Beiträge in deinem Posteingang.

Kein Spam. Jederzeit abmelden.