Linux-Logikoperationen

LinuxLinuxBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

Willkommen im Linux-Logikoperationen-Labor (Linux Logic Operations lab). In diesem Labor lernen Sie über logische Operationen in Linux kennen, die essentielle Werkzeuge für die Steuerung des Befehlsausführungsflusses und die Entscheidungsfindung in Skripten sind.

Logische Operationen ermöglichen es Ihnen, Befehle und Bedingungen zu kombinieren, sodass Sie komplexere Skripte erstellen können, die auf verschiedene Situationen reagieren können. Am Ende dieses Labs werden Sie verstehen, wie Sie logische Operatoren verwenden können, um die Befehlsausführung zu steuern und Dateieigenschaften in Linux zu überprüfen.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/BasicSystemCommandsGroup(["Basic System Commands"]) linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux(("Linux")) -.-> linux/FileandDirectoryManagementGroup(["File and Directory Management"]) linux(("Linux")) -.-> linux/VersionControlandTextEditorsGroup(["Version Control and Text Editors"]) linux/BasicSystemCommandsGroup -.-> linux/echo("Text Display") linux/BasicSystemCommandsGroup -.-> linux/test("Condition Testing") linux/BasicFileOperationsGroup -.-> linux/touch("File Creating/Updating") linux/BasicFileOperationsGroup -.-> linux/cat("File Concatenating") linux/BasicFileOperationsGroup -.-> linux/chmod("Permission Modifying") linux/FileandDirectoryManagementGroup -.-> linux/cd("Directory Changing") linux/FileandDirectoryManagementGroup -.-> linux/mkdir("Directory Creating") linux/VersionControlandTextEditorsGroup -.-> linux/nano("Simple Text Editing") subgraph Lab Skills linux/echo -.-> lab-271325{{"Linux-Logikoperationen"}} linux/test -.-> lab-271325{{"Linux-Logikoperationen"}} linux/touch -.-> lab-271325{{"Linux-Logikoperationen"}} linux/cat -.-> lab-271325{{"Linux-Logikoperationen"}} linux/chmod -.-> lab-271325{{"Linux-Logikoperationen"}} linux/cd -.-> lab-271325{{"Linux-Logikoperationen"}} linux/mkdir -.-> lab-271325{{"Linux-Logikoperationen"}} linux/nano -.-> lab-271325{{"Linux-Logikoperationen"}} end

Grundlegende logische Operationen in Linux verstehen

Die Linux-Shell bietet mehrere Möglichkeiten, Befehle und Bedingungen mithilfe von logischen Operatoren zu kombinieren. In diesem Schritt lernen Sie die am häufigsten verwendeten logischen Operatoren kennen: && (UND) und || (ODER).

Zunächst wechseln wir in unser Projektverzeichnis:

cd ~/project

Lassen Sie uns einige Testdateien erstellen, die wir während dieses Labs verwenden werden:

touch treasure_map.txt shield.txt kings_gauntlet.txt

Jetzt erstellen wir ein Skript, um grundlegende logische Operationen zu demonstrieren. Wir verwenden den nano-Texteditor, um eine Datei namens logic_basics.sh zu erstellen:

nano logic_basics.sh

In diesem Skript verwenden wir logische Operatoren, um zu prüfen, ob zwei Dateien existieren. Geben oder fügen Sie den folgenden Code in den Editor ein:

#!/bin/bash

## This script demonstrates logical AND (&&) and OR (||) operators
## It checks if two specific files exist in the current directory

if [[ -f "treasure_map.txt" ]] && [[ -f "shield.txt" ]]; then
  echo "Both files exist. Proceed with the mission."
else
  echo "One or both files are missing. Abort the mission!"
fi

Der &&-Operator bedeutet "UND" – beide Bedingungen müssen wahr sein, damit die Gesamtbedingung wahr ist.
Der -f-Test prüft, ob eine Datei existiert und eine reguläre Datei ist (kein Verzeichnis oder andere spezielle Datei).

Um die Datei in nano zu speichern, drücken Sie Ctrl+X, dann Y, um das Speichern zu bestätigen, und Enter, um den Dateinamen zu bestätigen.

Jetzt machen wir das Skript ausführbar und führen es aus:

chmod +x logic_basics.sh
./logic_basics.sh

Sie sollten die folgende Ausgabe sehen:

Both files exist. Proceed with the mission.

Lassen Sie uns ein weiteres Beispiel versuchen, um logische Operatoren besser zu verstehen. Erstellen Sie ein neues Skript namens logical_or.sh:

nano logical_or.sh

Fügen Sie den folgenden Inhalt hinzu:

#!/bin/bash

## This script demonstrates the logical OR (||) operator
## It checks if at least one of two files exists

if [[ -f "treasure_map.txt" ]] || [[ -f "nonexistent_file.txt" ]]; then
  echo "At least one file exists."
else
  echo "Neither file exists."
fi

Der ||-Operator bedeutet "ODER" – wenn eine der Bedingungen wahr ist, ist die Gesamtbedingung wahr.

Speichern Sie die Datei (Ctrl+X, Y, Enter), machen Sie sie ausführbar und führen Sie sie aus:

chmod +x logical_or.sh
./logical_or.sh

Ausgabe:

At least one file exists.

Dies zeigt, dass die Bedingung auch dann wahr ist, wenn "nonexistent_file.txt" nicht existiert, weil "treasure_map.txt" existiert.

Logische Operationen mit Dateiberechtigungen

In Linux steuern Dateiberechtigungen, wer Dateien lesen, schreiben oder ausführen kann. In diesem Schritt lernen Sie, wie Sie logische Operationen verwenden, um Dateiberechtigungen zu prüfen.

Zunächst erstellen wir ein Skript namens permission_check.sh:

nano permission_check.sh

Fügen Sie dem Skript den folgenden Inhalt hinzu:

#!/bin/bash

## This script checks read and write permissions on a file
## using logical operators

filename="kings_gauntlet.txt"

if [[ -r "$filename" ]] && [[ -w "$filename" ]]; then
  echo "You have read and write permissions on $filename."
elif [[ -r "$filename" ]] || [[ -w "$filename" ]]; then
  echo "You have limited permissions on $filename."
else
  echo "You do not have permissions on $filename."
fi

In diesem Skript:

  • -r prüft, ob die aktuelle Person die Datei lesen kann
  • -w prüft, ob die aktuelle Person die Datei schreiben kann
  • Der &&-Operator erfordert, dass beide Bedingungen wahr sind
  • Der ||-Operator erfordert, dass mindestens eine Bedingung wahr ist

Speichern Sie die Datei (Ctrl+X, Y, Enter) und machen Sie sie ausführbar:

chmod +x permission_check.sh

Jetzt ändern wir die Berechtigungen unserer Testdatei und sehen, wie sich dies auf die Ausgabe unseres Skripts auswirkt.

Zunächst setzen wir die Berechtigungen so, dass sowohl Lesen als auch Schreiben erlaubt sind:

chmod 600 kings_gauntlet.txt
./permission_check.sh

Ausgabe:

You have read and write permissions on kings_gauntlet.txt.

Jetzt ändern wir die Berechtigungen auf schreibgeschützt:

chmod 400 kings_gauntlet.txt
./permission_check.sh

Ausgabe:

You have limited permissions on kings_gauntlet.txt.

Schließlich entfernen wir alle Berechtigungen:

chmod 000 kings_gauntlet.txt
./permission_check.sh

Ausgabe:

You do not have permissions on kings_gauntlet.txt.

Vergessen Sie nicht, die Datei wieder sinnvolle Berechtigungen zu geben:

chmod 600 kings_gauntlet.txt

Befehlsketten mit logischen Operatoren

Logische Operatoren in Linux werden nicht nur in bedingten Anweisungen in Skripten verwendet - sie können auch direkt in der Befehlszeile eingesetzt werden, um Befehle zu verketten. In diesem Schritt lernen Sie, wie Sie logische Operatoren für die Befehlskettung verwenden.

Der &&-Operator ermöglicht es Ihnen, einen zweiten Befehl nur auszuführen, wenn der erste Befehl erfolgreich ist (also einen Exit-Status von Null zurückgibt). Dies ist nützlich, wenn Sie eine Sequenz von Befehlen ausführen möchten, bei der jeder Schritt von dem Erfolg des vorherigen Schritts abhängt.

Probieren wir ein einfaches Beispiel aus:

mkdir -p test_dir && echo "Directory created successfully"

Der mkdir -p-Befehl erstellt ein Verzeichnis (und die übergeordneten Verzeichnisse, falls erforderlich), und die -p-Option verhindert einen Fehler, wenn das Verzeichnis bereits existiert. Der echo-Befehl wird nur ausgeführt, wenn der mkdir-Befehl erfolgreich ist.

Ausgabe:

Directory created successfully

Jetzt probieren wir den ||-Operator aus, der den zweiten Befehl nur ausführt, wenn der erste Befehl fehlschlägt:

ls nonexistent_file.txt || echo "File not found"

Da "nonexistent_file.txt" nicht existiert, schlägt der ls-Befehl fehl, und der echo-Befehl wird ausgeführt.

Ausgabe:

ls: cannot access 'nonexistent_file.txt': No such file or directory
File not found

Sie können auch mehrere Befehle mit diesen Operatoren kombinieren. Erstellen Sie ein Skript namens command_chain.sh:

nano command_chain.sh

Fügen Sie den folgenden Inhalt hinzu:

#!/bin/bash

## This script demonstrates chaining commands with logical operators

echo "Starting command chain..."

## Create a directory and enter it only if creation succeeds
mkdir -p logic_test && cd logic_test && echo "Changed to new directory"

## Create a file and write to it only if creation succeeds
touch test_file.txt && echo "This is a test" > test_file.txt && echo "Created and wrote to file"

## Try to read a nonexistent file, or display an error message
cat nonexistent.txt || echo "Failed to read file"

## Return to the original directory
cd .. && echo "Returned to original directory"

echo "Command chain completed"

Speichern Sie die Datei (Ctrl+X, Y, Enter), machen Sie sie ausführbar und führen Sie sie aus:

chmod +x command_chain.sh
./command_chain.sh

Ausgabe:

Starting command chain...
Changed to new directory
Created and wrote to file
cat: nonexistent.txt: No such file or directory
Failed to read file
Returned to original directory
Command chain completed

Dieses Skript zeigt, wie logische Operatoren den Ablauf der Befehlsausführung in Abhängigkeit vom Erfolg oder Misserfolg vorheriger Befehle steuern können.

Fortgeschrittene Dateiprüfoperatoren

Linux bietet eine Vielzahl von Dateiprüfoperatoren, die mit logischen Operatoren kombiniert werden können. In diesem Schritt lernen Sie einige der nützlichsten Dateiprüfoperatoren kennen.

Erstellen wir ein Skript, das diese Operatoren demonstriert:

nano file_tests.sh

Fügen Sie den folgenden Inhalt hinzu:

#!/bin/bash

## This script demonstrates various file testing operators in Linux

## Check if a file exists (as a file, directory, or other type)
file_to_check="treasure_map.txt"
directory_to_check="test_dir"

echo "--- Basic File Tests ---"
## -e checks if the file exists (any type)
if [[ -e "$file_to_check" ]]; then
  echo "$file_to_check exists"
else
  echo "$file_to_check does not exist"
fi

## -f checks if it's a regular file (not a directory or device)
if [[ -f "$file_to_check" ]]; then
  echo "$file_to_check is a regular file"
fi

## -d checks if it's a directory
if [[ -d "$directory_to_check" ]]; then
  echo "$directory_to_check is a directory"
else
  echo "$directory_to_check is not a directory"
fi

echo "--- File Size Tests ---"
## -s checks if file is not empty (has a size greater than zero)
if [[ -s "$file_to_check" ]]; then
  echo "$file_to_check is not empty"
else
  echo "$file_to_check is empty"
fi

echo "--- Permission Tests ---"
## -r, -w, -x check read, write, and execute permissions
if [[ -r "$file_to_check" ]]; then
  echo "$file_to_check is readable"
fi

if [[ -w "$file_to_check" ]]; then
  echo "$file_to_check is writable"
fi

if [[ -x "$file_to_check" ]]; then
  echo "$file_to_check is executable"
else
  echo "$file_to_check is not executable"
fi

echo "--- Combining Tests with Logical Operators ---"
## Combining tests with AND (&&)
if [[ -f "$file_to_check" ]] && [[ -r "$file_to_check" ]]; then
  echo "$file_to_check is a readable file"
fi

## Combining tests with OR (||)
if [[ -f "$file_to_check" ]] || [[ -d "$file_to_check" ]]; then
  echo "$file_to_check is either a file or a directory"
fi

Speichern Sie die Datei (Ctrl+X, Y, Enter), machen Sie sie ausführbar und führen Sie sie aus:

chmod +x file_tests.sh
./file_tests.sh

Die Ausgabe zeigt die Ergebnisse verschiedener Dateiprüfungen an unseren vorhandenen Dateien und Verzeichnissen.

Um die Tests interessanter zu gestalten, fügen wir unserer treasure_map.txt-Datei etwas Inhalt hinzu und erstellen das Verzeichnis, das wir testen:

echo "This is a treasure map!" > treasure_map.txt
mkdir -p test_dir

Führen Sie das Skript nun erneut aus:

./file_tests.sh

Sie sollten jetzt eine andere Ausgabe sehen, da die Datei Inhalt hat und das Verzeichnis existiert.

Dieses Skript zeigt, wie Sie verschiedene Dateiprüfoperatoren verwenden und sie mit logischen Operatoren kombinieren können, um komplexe Dateiprüfungen durchzuführen.

Zusammenfassung

In diesem Lab haben Sie sich mit logischen Operationen in Linux vertraut gemacht und gelernt, wie sie eingesetzt werden können, um den Ablauf der Befehlsausführung und das Verhalten von Skripten zu steuern. Hier ist eine Zusammenfassung dessen, was Sie gelernt haben:

  1. Sie haben die grundlegenden logischen Operatoren && (UND) und || (ODER) kennengelernt und gelernt, wie sie in bedingten Anweisungen verwendet werden.

  2. Sie haben Dateiprüfoperatoren wie -f, -r, -w und -x genutzt, um die Existenz von Dateien und die Zugriffsrechte zu überprüfen.

  3. Sie haben gelernt, wie man Befehle mit logischen Operatoren verketten kann, um Sequenzen von Operationen zu erstellen, die vom Erfolg oder Misserfolg vorheriger Befehle abhängen.

  4. Sie haben verschiedene Dateiprüfoperatoren kennengelernt und gelernt, wie man sie mit logischen Operatoren kombiniert, um komplexere Bedingungen zu erstellen.

Diese logischen Operationen sind grundlegende Werkzeuge in der Linux-Skripting und -Befehlszeilen-Nutzung. Sie ermöglichen es Ihnen, ausgefeiltere Skripte zu erstellen, die verschiedene Situationen basierend auf Bedingungen und den Ergebnissen vorheriger Befehle bewältigen können.

Durch das Beherrschen von logischen Operationen haben Sie eine essentielle Fähigkeit für die Linux-Systemadministration, -Automatisierung und -Skripting erworben, die Ihnen auf Ihrem Weg als Linux-Benutzer oder -Administrator gut dienen wird.