GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Bash-Skripting – Bedingte Anweisungen

In diesem Handbuch lernen wir die Verwendung von bedingten Anweisungen in Bash-Skripten anhand von Beispielen kennen. Die Entscheidungsfindung ist ein wichtiger Schritt bei der Programmierung. Es kann eine Situation geben, in der bestimmte Bedingungen erfüllt sein müssen und auf deren Grundlage Sie eine Logik schreiben müssen. Dies ist, was eine bedingte Anweisung tut. Die bedingten Anweisungen ermöglichen es Ihnen, Logik zu schreiben und Entscheidungen zu treffen. Das Konzept, das Sie hier lesen, ist für alle Programmiersprachen das gleiche, aber mit Unterschieden in Syntax und Implementierung.

Bedingte Anweisungssyntax

Der Baustein der bedingten Anweisung in Bash ist wie folgt.

if [[ conditions ]]
then
   code
elif [[ conditions ]]
then
   code
else
   code
fi

Code-Erklärung:

  1. Die Schlüsselwörter "if" und "fi" markiert den Anfang und das Ende der Bedingungsanweisung. Jeder if-Anweisung sollte das "then" folgen Schlüsselwort.
  2. Entweder [[ ]] oder [ ] sollte zur Beurteilung des Zustands herangezogen werden. Wenn die Bedingung zu „Wahr“ ausgewertet wird , dann wird ein Codeblock ausgeführt.
  3. Eine bedingte Anweisung kann eine if-Bedingung und mehrere elif haben Bedingungen. Wenn eine Bedingung als wahr ausgewertet wird, werden alle nachfolgenden bedingten Anweisungen übersprungen.
  4. Wenn alle if oder elif block wird als false ausgewertet dann den Codeblock von "else" Klausel wird ausgeführt.
  5. Obwohl es keine strengen Einrückungsregeln gibt, lassen Sie für eine bessere Lesbarkeit 2 Leerzeichen für den Codeblock.

Um die Bedingungen auszuwerten, hat bash einen eingebauten Befehl namens "test" . Eckige Klammern sind mit dem Testbefehl identisch, sodass Sie entweder den Testbefehl oder eckige Klammern verwenden können.

$ type -a test
test is a shell builtin
test is /usr/bin/test
test is /bin/test

Es gibt eine Reihe von Operatoren, die vom test unterstützt werden Befehl, um die Bedingungen auszuwerten, und wir werden im nächsten Abschnitt sehen, wie diese Operatoren verwendet werden. Um die Liste der Operatoren zu erhalten, können Sie einen der folgenden Befehle ausführen.

$ man test
$ help test

Dateitestoperatoren

Dateitestoperatoren können verwendet werden, um mit Datei- oder Verzeichnisobjekten zu arbeiten. Mit Dateitestoperatoren können Sie überprüfen, ob eine bestimmte Datei oder ein bestimmtes Verzeichnis vorhanden ist oder nicht, ein bestimmtes Objekt eine Datei oder ein Verzeichnis ist, mit welchem ​​Dateityp Sie es zu tun haben, die Größe der Datei usw. Führen Sie den folgenden Befehl aus und achten Sie darauf den Dateioperatorabschnitt.

$ man test

Nicht alle Operatoren werden häufig verwendet, aber ich werde Sie durch die wichtigsten führen.

Um zu überprüfen, ob eine bestimmte Datei vorhanden ist oder nicht, verwenden Sie -e Flagge. Hier überprüfe ich, ob die .bashrc Datei in meinem Home-Verzeichnis vorhanden ist oder nicht.

if [[ -e /home/${USER}/.bashrc ]]
then
  echo "File is present"
else
  echo "File is not present"
fi

Um zu überprüfen, ob ein bestimmtes Verzeichnis vorhanden ist oder nicht, verwenden Sie -d Flagge. Hier suche ich nach dem Desktop Verzeichnis in meinem Home-Ordner.

if [[ -d ~/Desktop/ ]]
then
  echo "Directory is present"
else
  echo "Directory is not present"
fi

Um zu prüfen, ob die Datei eine Nicht-Null-Größe hat verwenden Sie den -s Flagge. Hier habe ich eine Datei namens "zero_byte.txt" erstellt und etwas Text angehängt.

$ touch ~/Desktop/zero_byte.txt
$ echo "Writing something" >> ~/Desktop/zero_byte.txt
$ if [[ -s ~/Desktop/zero_byte.txt ]]
then
  echo "File is not zero byte"
else
  echo "File is zero byte"
fi

Sie können ! verwenden Symbol mit beliebigen Flags, die das Ergebnis umkehren. Ich verwende das gleiche Beispiel wie oben, aber mit "!" Symbol. Es wird die Datei invertieren und als Null-Byte-Datei drucken, obwohl dies nicht der Fall ist.

$ if [[ ! -s ~/Desktop/zero_byte.txt ]]
then
  echo "File is not zero byte"
else
  echo "File is zero byte"
fi

Integer-Vergleichsoperatoren

Unten sind die Integer-Vergleichsoperatoren, die gegen zwei gegebene Integer ausgewertet werden.

-eq => Integer X is equal to Integer Y
-ne => Integer X is not equal to Integer Y
-gt => Integer X is greater than Integer Y
-ge => Integer X is greater than or equal to Integer Y
-lt => Integer X is lesser than Integer Y
-le => Integer X is lesser than or equal to Integer Y

Jeder Bash-Befehl gibt einen Exit-Code zwischen 0-255 zurück und wir werden die Integer-Vergleichsoperatoren verwenden, um die Exit-Codes auszuwerten. Im folgenden Beispiel weise ich den Exit-Code von nvim zu Befehl an eine Variable namens EXCODE und den Integer-Vergleich durchführen. Da neovim nicht verfügbar ist, wird der Exit-Code 127 ausgegeben (Befehl nicht gefunden Fehler).

$ EXCODE=$(nvim;echo $?)
$ if [[ $EXCODE -eq 0 ]]
then      
  echo "nvim is available to use"
elif [[ $EXCODE -eq 127 ]]
then
  echo "Command not found, check if nvim is installed or not"
else     
   echo "Return code is other than 0 & 127. Check and fix the error"
fi

Im obigen Beispiel habe ich den elif verwendet Aussage für die erste Aussage in diesem Artikel. Zuerst das "if" Bedingung wird ausgewertet, um zu prüfen, ob der Rückgabecode Null ist, was falsch zurückgibt, dann wird die Steuerung an elif übergeben -Anweisung und die Bedingung wird als wahr ausgewertet und führt den Codeblock aus. Sie können beliebig viel elif hinzufügen Anweisung zur Bewertung verschiedener Bedingungen.

Sie können auch mehrere Bedingungen in einem einzigen if auswerten oder elif Anweisung mit logischem AND, OR Operator.

LOGICAL AND ⇒ && symbol => All the conditions should be evaluated to be true.
LOGICAL OR ⇒ || symbol => Anyone condition should be evaluated to be true.

Unten ist ein Beispiel für ein logisches UND Operator, wobei die in den Variablen X gespeicherte Ganzzahl und Y werden als wahr bewertet .

$ X=10
$ Y=15
$ if [[ $X -eq 10 && $Y -eq 15 ]]
then
  echo "ok to proceed"
else
  echo "Not ok to proceed"
fi

Unten ist das Beispiel für ein logisches ODER Operator wo Variable X wird als wahr bewertet und Variable Y wird als false bewertet .

$ X=10
$ Y=15
$ if [[ $X -eq 10 || $Y -eq 10 ]]
then
  echo "ok to proceed"
else
  echo "Not ok to proceed"
fi

Kompakte Bedingungsanweisungen

Wenn Sie nur ein if schreiben müssen und else Anweisung, dann können Sie die Abkürzung verwenden. Kurz gesagt ist es nicht notwendig, if..then..else..fi zu verwenden Schlüsselwörter. Sie können logisches UND verwenden (&& ) und logisches ODER (|| ) Operatoren.

[[ condition ]] && << run if condition is evaluated to true >> || << run if condition is evaluated to false >>

Schauen Sie sich das folgende Beispiel an. Ich versuche zu überprüfen, ob das Paket neofetch verfügbar ist und falls nicht verfügbar versuchen, es zu installieren.

$ which neofetch && echo "Neofetch already installed" || sudo apt install neofetch -y

Code-Erklärung:

  • Es wird den "which neofetch" ausführen Befehl und wenn der Rückkehrcode Null ist, dann was auch immer nach && kommt Operator wird ausgeführt.
  • Wenn der Rückgabecode über Null liegt (als falsch ausgewertet wird), was auch immer nach || kommt Operator wird ausgeführt.
  • Dies ähnelt dem if und else Erklärung. Das "If" -Anweisung wird nur ausgeführt, wenn die Bedingung als wahr ausgewertet wird. In diesem Fall ist es AND Operator. Ebenso wird die else-Klausel nur ausgeführt, wenn "if" Bedingung wird als falsch ausgewertet. In diesem Fall ist es ODER Betreiber.
  • Auf meinem Rechner ist neofetch bereits installiert, daher ist der Exit-Code null. Es wird das echo ausführen Befehl. Wenn neofetch nicht installiert ist, wird apt install ausgeführt Befehl.

Unten ist ein weiteres Beispiel, in dem ich den Dateitestoperator verwende, um zu prüfen, ob eine Datei null Bytes enthält oder nicht.

$ [[ -s ~/.bashrc ]] && echo "Not a empty file" || echo "Empty file"

String-Vergleichsoperatoren

Wie Integer und Datei Testoperatoren haben wir eine Reihe von Operatoren, um mit Strings zu arbeiten. Unten sind die wichtigen String-Operatoren aufgeführt.

-z => Check if string is NULL.
-n => Check if string is not NULL.
== => Check for string equality.
!= => Check for string inequality.

Um zu überprüfen, ob der String NULL ist oder nicht, verwenden Sie das -z und -n Flagge. Ich verwende die kompakte bedingte Anweisungssyntax, um die Bedingung auszuwerten.

$ [[ -z "Howdy" ]] && echo "String is NULL" || echo "String is not NULL"
$ [[ -n "Howdy" ]] && echo "String is not NULL" || echo "String is NULL"

Um zu prüfen, ob zwei Strings gleich sind, verwenden Sie == Operator. Bei Zeichenfolgen wird zwischen Groß- und Kleinschreibung unterschieden, daher müssen Sie beim Vergleich diesen Punkt berücksichtigen.

$ X="Linux"
$ Y="Linux"
$ [[ $X == $Y ]] && echo "Equal" || echo "Not equal"

Um zu prüfen, ob zwei Strings nicht gleich sind, verwenden Sie != Betreiber.

$ [[ $X != $Y ]] && echo "Not Equal" || echo "Equal"

Schlussfolgerung

In diesem Artikel haben wir gesehen, wie man mit bedingten Anweisungen in Bash arbeitet. Wir haben auch gesehen, wie Dateitest-, Integer- und String-Operatoren verwendet werden. Schließlich haben wir anhand von Beispielen besprochen, wie kompakte bedingte Anweisungen mit logischen UND- und logischen ODER-Operatoren geschrieben werden.

Für Feedback oder Vorschläge nutzen Sie bitte den Kommentarbereich und wir melden uns gerne zurück.

Bash-Scripting-Leitfäden:

  • Bash-Skripting – String-Manipulation
  • Bash-Skripting – Printf-Befehl mit Beispielen erklärt
  • Bash-Skripting – Indiziertes Array mit Beispielen erklärt
  • Bash-Skripting – Assoziatives Array mit Beispielen erklärt
  • Bash-Skripting – For-Schleife mit Beispielen erklärt
  • Bash-Skripting – While- und Until-Schleife mit Beispielen erklärt
  • Bash-Umleitung mit Beispielen erklärt
  • Bash-Scripting – Variablen mit Beispielen erklärt
  • Bash-Scripting – Funktionen mit Beispielen erklärt
  • Bash-Echo-Befehl mit Beispielen in Linux erklärt
  • Bash Heredoc-Tutorial für Anfänger

Linux
  1. So überprüfen Sie, ob eine Datei oder ein Verzeichnis in Bash vorhanden ist

  2. Bash:In Datei schreiben

  3. Bash-Scripting(I)

  4. Die Bash‘?

  5. Bash-Skripte können auch als Root nicht ausgeführt werden?

Bash-Scripting:So lesen Sie Daten aus Textdateien

Bash-Skripting (II)

Bash-Scripting(III)

Bash-If-Else-Anweisungen – Alles, was Sie wissen müssen

Bash-Anfängerserie Nr. 5:Verwenden von arithmetischen Operatoren in Bash-Skripten

Bash If Else und andere bedingte Anweisungen verstehen