Website-Suche

So erstellen Sie einfache Shell-Skripte unter Linux


Das Erstellen von Shell-Skripten ist eine der wichtigsten Fähigkeiten, die Linux-Benutzer zur Hand haben sollten. Shell-Skripte spielen eine enorme Rolle bei der Automatisierung sich wiederholender Aufgaben, deren zeilenweise Ausführung ansonsten mühsam wäre.

In diesem Tutorial beleuchten wir einige der grundlegenden Shell-Scripting-Vorgänge, die jeder Linux-Benutzer haben sollte.

1. Erstellen Sie ein einfaches Shell-Skript

Ein Shell-Skript ist eine Datei, die ASCII-Text enthält. Wir beginnen mit der Erstellung eines einfachen Shell-Skripts und verwenden dazu einen Texteditor. Es gibt eine ganze Reihe von Texteditoren, sowohl Befehlszeilen- als auch GUI-basierte. Für diese Anleitung verwenden wir den vim-Editor.

Wir beginnen mit der Erstellung eines einfachen Skripts, das bei der Ausführung „Hallo Welt“ anzeigt.

vim hello.sh

Fügen Sie den folgenden Inhalt in die Datei ein und speichern Sie ihn.

#!/bin/bash
Print Hello world message
echo "Hello World!"

Lassen Sie uns das Shell-Skript Zeile für Zeile durchgehen.

  • Die erste Zeile – #!/bin/bash – wird als Shebang-Header bezeichnet. Dies ist ein spezielles Konstrukt, das angibt, welches Programm zur Interpretation des Skripts verwendet wird. In diesem Fall ist dies die bash-Shell, die durch /bin/bash angegeben wird. Es gibt andere Skriptsprachen wie Python, das durch #!/usr/bin/python3 gekennzeichnet ist, und Perl, dessen Shebang-Header durch gekennzeichnet ist #!/usr/bin/perl.
  • Die zweite Zeile ist ein Kommentar. Ein Kommentar ist eine Anweisung, die beschreibt, was ein Shell-Skript tut und was nicht ausgeführt wird, wenn das Skript ausgeführt wird. Kommentaren wird immer das Rautezeichen # vorangestellt.
  • Die letzte Zeile ist der Befehl, der die Nachricht „Hello World“ auf dem Terminal ausgibt.

Der nächste Schritt besteht darin, das Skript ausführbar zu machen, indem Sie wie gezeigt die Ausführungsberechtigung mit dem Befehl chmod zuweisen.

chmod +x  hello.sh

Führen Sie abschließend das Shell-Skript mit einem der folgenden Befehle aus:

bash hello.sh
OR
./hello.sh

2. Verwenden von bedingten Anweisungen zum Ausführen von Code

Wie bei anderen Programmiersprachen werden im Bash-Skripting bedingte Anweisungen verwendet, um Entscheidungen zu treffen, wobei die Syntax nur geringfügig variiert. Wir werden die bedingten Anweisungen if, if-else und elif behandeln.

Beispiel einer Nur-if-Anweisung

Mit der if-Anweisung können einzelne oder mehrere Bedingungen getestet werden. Wir beginnen mit der grundlegenden Verwendung der if-Anweisung zum Testen einer einzelnen Bedingung. Die if-Anweisung wird durch die if ... fi-Blöcke definiert.

if command
then
  statement
fi

Werfen wir einen Blick auf das Shell-Skript unten.

#!/bin/bash
echo 'Enter the score'
read x

if [[ $x == 70 ]]; then
  echo 'Good job!'
fi

Das obige Shell-Skript fordert den Benutzer auf, eine Punktzahl anzugeben, die dann in einer Variablen x gespeichert wird. Entspricht die Punktzahl 70, gibt das Skript die Ausgabe „Good job!“ zurück. Mit dem Vergleichsoperator == wird geprüft, ob die eingegebene Punktzahl, die in der Variablen x gespeichert ist, äquivalent zu 100 ist.

Zu den weiteren Vergleichsoperatoren, die Sie verwenden können, gehören:

  • -eq – Gleich
  • -ne – Ungleich
  • -lt – Kleiner als
  • -le – Kleiner oder gleich
  • -lt – Kleiner als
  • -ge – Größer als oder gleich

Beispielsweise gibt der if-statement-Block unten „Work Harder“ aus, wenn die Eingabebewertung einen Wert unter 50 hat.

if [[ $x -lt 50 ]]; then
  echo 'Work Harder!'
fi

Beispiel einer if-else-Anweisung

Für Situationen, in denen Sie zwei mögliche Ergebnisse haben: – ob dies oder das – ist die if-else-Anweisung praktisch.

if command
then
  statement1
else
  statement2
fi

Das folgende Skript liest den Eingabewert und prüft, ob er größer oder gleich 70 ist.

Wenn die Punktzahl größer oder gleich 70 ist, erhalten Sie die Meldung „Großartige Arbeit, Sie haben bestanden!“. Wenn die Punktzahl jedoch unter 70 fällt, wird die Ausgabe „Sie haben versagt“ ausgegeben.

#!/bin/bash

echo 'Enter the score'

read x

if [[ $x -ge 70 ]]; then
  echo 'Great job, You passed!'
else
  echo  'You failed'
fi

Beispiel einer if-elif-else-Anweisung

In Szenarien, in denen es mehrere Bedingungen und unterschiedliche Ergebnisse gibt, wird die if-elif-else-Anweisung verwendet. Diese Anweisung hat das folgende Format.

if condition1
then
  statement1
elif condition2
then
  statement2
else
  statement3
fi

Wir haben zum Beispiel ein Skript für eine Lotterie, das prüft, ob die eingegebene Zahl entweder 90, 60 oder 30 ist.

#!/bin/bash

echo 'Enter the score'

read x

if [[ $x -eq 90 ]];
then
  echo “You have won the First Prize”

elif [[ $x -eq 60 ]];
then
  echo “You have won the Second Prize”

elif [[ $x -eq 30 ]];
then 
  echo “You have won the Second Prize”
else
  echo “Please try again”
fi

3. Verwendung der If-Anweisung mit AND-Logik

Sie können die if-Anweisung zusammen mit dem logischen Operator AND verwenden, um eine Aufgabe auszuführen, wenn zwei Bedingungen erfüllt sind. Der &&-Operator wird zur Bezeichnung der AND-Logik verwendet.

#!/bin/bash

echo 'Please Enter your user_id'
read user_id

echo 'Please Enter your tag_no'
read tag_id

if [[ ($user_id == “tecmint” && $tag_id -eq 3990) ]];
then
  echo “Login successful”
else
  echo “Login failure”
fi

5. Verwendung der If-Anweisung mit OR-Logik

Bei Verwendung der OR-Logik, die durch das Symbol || dargestellt wird, muss eine der Bedingungen mit dem Skript erfüllt sein, um die erwarteten Ergebnisse zu liefern.

#!/bin/bash

echo 'Please enter a random number'
read number

if [[ (number -eq 55 || number -eq 80) ]];
then
 echo 'Congratulations! You’ve won'
else
 echo 'Sorry, try again'
fi

Verwenden Sie Schleifenkonstrukte

Bash-Schleifen ermöglichen es Benutzern, eine Reihe von Aufgaben auszuführen, bis ein bestimmtes Ergebnis erreicht ist. Dies ist praktisch bei der Ausführung sich wiederholender Aufgaben. In diesem Abschnitt werfen wir einen Blick auf einige der Schleifen, die Sie auch in anderen Programmiersprachen finden.

While-Schleife

Dies ist eine der am einfachsten zu bearbeitenden Schleifen. Die Syntax ist ganz einfach:

while  <some test>
do
 commands
done

Die folgende while-Schleife listet bei ihrer Ausführung alle Zahlen von 1 bis 10 auf.

#!/bin/bash
A simple while loop
counter=1
while [ $counter -le 10 ]
 do
echo $counter
 ((counter++))
done

Lassen Sie uns die while-Schleife besprechen:

Die Variable Zähler wird auf 1 initialisiert. Und solange die Variable kleiner oder gleich 10 ist, wird der Wert des Zählers erhöht, bis die Bedingung erfüllt ist. Die Zeile echo $counter gibt alle Zahlen von 1 bis 10 aus.

For-Schleife

Wie die while-Schleife wird eine for-Schleife verwendet, um Code iterativ auszuführen. D.h. Wiederholen Sie die Codeausführung so oft wie möglich, wie vom Benutzer definiert.

Die Syntax lautet:

for var in 1 2 3 4 5 N
do
 command1
 command2
done

Die folgende for-Schleife durchläuft 1 bis 10 und verarbeitet deren Werte auf dem Bildschirm.

Eine bessere Möglichkeit, dies zu erreichen, besteht darin, einen Bereich mithilfe der doppelten geschweiften Klammern { wie gezeigt zu definieren, anstatt alle Zahlen einzugeben.

#!/bin/bash
Specify range in a for loop

for num in {1..10}
do
  echo $num
done

Bash-Positionsparameter

Ein Positionsparameter ist eine spezielle Variable, auf die im Skript verwiesen wird, wenn Werte an die Shell übergeben werden, die jedoch nicht zugewiesen werden kann. Positionsparameter reichen von $0 $1 $2 $3 …… bis $9. Über den Wert $9 hinaus müssen die Parameter in geschweifte Klammern eingeschlossen werden, z. B. $ {10}, $ {11} … und so weiter.

Beim Ausführen des Skripts übernimmt der erste Positionsparameter, der $0 ist, den Namen des Shell-Skripts. Der Parameter $1 übernimmt die erste Variable, die am Terminal übergeben wird, $2 die zweite, $3 die dritte und so weiter.

Lassen Sie uns wie gezeigt ein Skript test.sh erstellen.

#!/bin/bash
echo "The name of the script is: " $0
echo "My first name is: " $1
echo "My second name is: " $2

Führen Sie als Nächstes das Skript aus und geben Sie den Vor- und Nachnamen als Argumente an:

bash test.sh James Kiarie

Anhand der Ausgabe können wir erkennen, dass die erste ausgegebene Variable der Name des Shell-Skripts ist, in diesem Fall test.sh. Anschließend werden die Namen entsprechend den im Shell-Skript definierten Positionsparametern ausgedruckt.

Positionsparameter sind insofern nützlich, als sie Ihnen dabei helfen, die eingegebenen Daten anzupassen, anstatt einer Variablen explizit einen Wert zuzuweisen.

Exit-Codes für Shell-Befehle

Beginnen wir mit der Beantwortung einer einfachen Frage: Was ist ein Exit-Code?

Jeder von einem Benutzer oder einem Shell-Skript auf der Shell ausgeführte Befehl hat einen Exit-Status. Ein Exit-Status ist eine Ganzzahl.

Ein Exit-Status von 0 bedeutet, dass der Befehl erfolgreich und ohne Fehler ausgeführt wurde. Alles zwischen 1 und 255 zeigt an, dass der Befehl fehlgeschlagen ist oder nicht erfolgreich ausgeführt wurde.

Um den Exit-Status eines Befehls zu ermitteln, verwenden Sie die Shell-Variable $?.

Ein Exit-Status von 1 weist auf einen allgemeinen Fehler oder unzulässige Fehler wie das Bearbeiten von Dateien ohne Sudo-Berechtigungen hin.

Ein Exit-Status von 2 weist auf eine falsche Verwendung eines Befehls oder einer integrierten Shell-Variablen hin.

Der Exit-Status 127 weist auf einen illegalen Befehl hin, der normalerweise den Fehler „Befehl nicht gefunden“ hervorruft.

Verarbeiten der Ausgabe von Shell-Befehlen innerhalb eines Skripts

Beim Bash-Scripting können Sie die Ausgabe eines Befehls zur späteren Verwendung in einer Variablen speichern. Dies wird auch als Shell-Befehlsersetzung bezeichnet und kann auf folgende Weise erreicht werden.

variable=$(command)
OR
variable=$(/path/to/command)
OR
variable=$(command argument 1 argument 2 ...)

Sie können beispielsweise den Befehl date in einer Variablen namens today speichern und das Shell-Skript aufrufen, um das aktuelle Datum anzuzeigen.

#!/bin/bash

today=$(date)

echo “Today is $today”

Nehmen wir ein anderes Beispiel. Angenommen, Sie möchten die gültigen Anmeldebenutzer auf Ihrem Linux-System finden. Wie würden Sie vorgehen? Zunächst wird die Liste aller Benutzer (System-, Prozess- und Anmeldebenutzer) in der Datei /etc/passwd gespeichert.

Um die Datei anzuzeigen, müssen Sie den Befehl cat verwenden. Um jedoch auf angemeldete Benutzer einzugrenzen, verwenden Sie den Befehl grep, um nach Benutzern mit dem Attribut /bin/bash zu suchen, und verwenden Sie den Befehl cut -c 1-10 als angezeigt, um die ersten 10 Zeichen der Namen anzuzeigen.

Wir haben den cat-Befehl in der Variablen login_users gespeichert.

#!/bin/bash
login_users=$(cat /etc/passwd | grep /bin/bash | cut -c 1-10)
echo 'This is the list of login users:
echo $login_users

Damit endet unser Tutorial zum Erstellen einfacher Shell-Skripte. Wir hoffen, dass Sie dies wertvoll fanden.