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.