Dieser Artikel behandelt die Grundlagen der Bash-Shell-Skripterstellung und beschreibt die am häufigsten verwendeten logischen Konstrukte, einschließlich einzelner if Anweisung if-else Anweisung und elif Erklärung. Darüber hinaus behandeln wir die richtige Art und Weise, Zeichenfolgen und Zahlen zu vergleichen. Verbessern Sie Ihr Linux-Shell-Erlebnis in 5 Minuten!
Wann immer Sie ein erfahrener Systemadministrator oder Linux-Anfänger sind, lohnt es sich, die Grundlagen des Shell-Skriptings zu kennen. Diese Fähigkeit gibt Ihnen die Möglichkeit, wiederholbare Aufgaben auf einem einzelnen oder auf mehreren Servern zu automatisieren. Normalerweise umfassen diese Aufgaben die Installation von Software und die Konfiguration von Systemdiensten.
If-Anweisung
wenn -Anweisung dient als grundlegender Kern für alle Programmiersprachen. Diese Anweisung hilft bei der Implementierung der Entscheidungsfindungslogik in Ihrem Programm oder einem Skript. Deshalb ist es wichtig zu verstehen, wie man verschiedene if verwendet Aussagen.
Hier ist die grundlegende Syntax:
if [ condition ]
then
COMMANDS
fi
Wo:
- Bedingung – ist der logische Operator des if Aussage.
- BEFEHLE – Befehle, die ausgeführt werden, wenn die Bedingung wahr ist .
- wenn, dann, fi – sind Syntaxschlüsselwörter.
Hier ist eine Liste der am häufigsten verwendeten Testbedingungsoperatoren:
Operator | Beschreibung |
---|---|
! AUSDRUCK | Der AUSDRUCK ist falsch. |
-n STRING | Die Länge von STRING ist größer als null.Text |
-z STRING | Die Länge von STRING ist Null (der STRING ist leer) |
STRING1 =STRING2 | STRING1 ist gleich STRING2 |
STRING1 !=STRING2 | STRING1 ist nicht gleich STRING2 |
INTEGER1 -eq INTEGER2 | INTEGER1 ist numerisch gleich INTEGER2 |
GANZZAHL1 -gt GANZZAHL2 | INTEGER1 ist numerisch größer als INTEGER2 |
INTEGER1 -lt INTEGER2 | INTEGER1 ist numerisch kleiner als INTEGER2 |
-e DATEI | DATEI existiert |
-d DATEI | DATEI existiert und es ist ein Verzeichnis |
-s DATEI | DATEI existiert und ist größer als Null (DATEI ist nicht leer. |
-w DATEI | DATEI existiert und die Schreibberechtigung ist erteilt. |
-x DATEI | DATEI existiert und die Ausführungserlaubnis ist erteilt. |
-r DATEI | DATEI existiert und die Leseberechtigung ist erteilt. |
Das Interessanteste ist, dass während der Bash-Skriptausführung alles in [ ] wird zum Test bestanden Dienstprogramm, das entweder true zurückgibt oder falsch . Wenn Sie also die Syntax des Operators vergessen haben, verwenden Sie einfach seine Manpage:
man test
Sehen wir uns das einfachste wenn an Anweisungsbeispiel:
#!/bin/bash
var=2
if [ $var -eq 2 ]
then
echo "var equals 2"
fi
Erwartete Ausgabe:
var equals 2
Im obigen Beispiel setzen wir die Variable var Wert auf 2 , dann haben wir getestet, ob die var Wert ist gleich (-eq ) 2 und druckte die Nachricht.
Im wirklichen Leben verwenden wir normalerweise if Anweisungen in Kombination mit Bash-Schleifenkonstrukten (For-Schleifen, While-Schleifen, Until-Schleifen). Hier ist ein Beispiel für die Verwendung von if Anweisung mit für -Schleife:
#!/bin/bash
for var in 1 2 3 4 5
do
if [ $var -eq 3 ]
then
echo "Value 3 found"
break
fi
echo var=$var
done
Erwartete Ausgabe:
var=1
var=2
Value 3 found
In diesem Beispiel gehen wir die Liste der Nummern ab 1 durch bis 5 in für -loop und druckt den Wert der Variablen, die wir gerade verarbeitet haben. Wenn der Wert 3 gefunden wird, unterbrechen wir die Skriptausführung.
Zusätzlich zu den obigen Beispielen können Sie das Ergebnis einer mathematischen Berechnung im wenn verwenden Aussage:
#!/bin/bash
for var in {1..10}
do
if (( $var % 2 == 0 ))
then
echo "$var is even number"
fi
done
Im obigen Beispiel prüfen wir gerade Zahlen im Bereich zwischen 1 und 10 .
Erwartete Ausgabe:
2 is even number
4 is even number
6 is even number
8 is even number
10 is even number
Jetzt können Sie die Ausgabe oder das Ausführungsergebnis eines Bash-Befehls überprüfen. Versuchen wir zu überprüfen, ob der Benutzer in /etc/passwd existiert Datei.
#!/bin/bash
user='root'
check_result=$( grep -ic "^$user" /etc/passwd )
if [ $check_result -eq 1 ]
then
echo "$user user found"
fi
Im obigen Beispiel verwenden wir grep Befehl zum Durchsuchen von /etc/passwd Datei:
grep -ic "^$user" /etc/passwd
Wo:
- -ich – Suche ohne Berücksichtigung der Groß-/Kleinschreibung.
- -c – gibt die Anzahl der gefundenen Zeilen zurück (0 – nichts gefunden; 1 oder mehr, wenn etwas gefunden wurde).
- “^$Benutzer” – Suchen Sie die Zeichenfolge, die beginnt (^ ) vom Wert von $user variabel.
Alles andere innerhalb des Beispiels sollte klar sein.
Erwartete Ausgabe:
root user found
Als Nächstes prüfen wir das /etc/passwd Datei existiert:
#!/bin/bash
file='/etc/passwd'
if [ -s $file ]
then
echo "$file file found"
fi
Erwartete Ausgabe:
/etc/passwd file found
If-else-Anweisung
Nachdem Sie sich mit dem grundlegenden if vertraut gemacht haben Anweisung sehen wir uns an, wie Bash if-else verwendet wird Aussage.
Hier ist die allgemeine Syntax:
if [ condition ]
then
TRUE_COMMANDS
else
FALSE_COMMANDS
fi
Wo:
- Bedingung – ist der logische Operator des if Erklärung.
- TRUE_COMMANDS – Befehle, die ausgeführt werden, wenn die Bedingung wahr ist.
- FALSE_COMMANDS – Befehle, die ausgeführt werden, wenn die Bedingung falsch ist.
- wenn, dann, sonst, fi – sind Syntaxschlüsselwörter.
Um zu demonstrieren, wie es funktioniert, ändern wir ein Beispiel, bei dem wir gerade Zahlen erkannt haben. Lassen Sie uns nun drucken, welche Zahl gerade und welche ungerade ist:
#!/bin/bash
for var in {1..10}
do
if (( $var % 2 == 0 ))
then
echo "$var is even number"
else
echo "$var is odd number"
fi
done
Hier ist eine erwartete Ausgabe:
1 is odd number
2 is even number
3 is odd number
4 is even number
5 is odd number
6 is even number
7 is odd number
8 is even number
9 is odd number
10 is even number
Elif-Anweisung
Was ist nun, wenn wir während unserer Skriptausführung mehrere verschiedene Bedingungen überprüfen müssen? Das ist auch mit der elif-Anweisung möglich, die eine Abkürzung von „else if“ ist “.
So sieht die Syntax aus:
if [ condition_1 ]
then
CONDITION_1_COMMANDS
elif [ condition_2 ]
then
CONDITION_2_COMMANDS
else
ALL_OTHER_COMMANDS
fi
Wo:
- Bedingung_1 – ist die logische Bedingung zum Ausführen von CONDITION_1_COMMANDS .
- CONDITION_1_COMMANDS – Befehle, die ausgeführt werden, wenn die Bedingung_1 ist wahr .
- CONDITION_2_COMMANDS – Befehle, die ausgeführt werden, wenn die Bedingung_2 ist wahr .
- ALL_OTHER_COMMANDS – Befehle, die ausgeführt werden, wenn condition_1 und Bedingung_2 sind falsch .
- wenn, dann, elif, sonst, fi – sind Syntaxschlüsselwörter.
Sehen wir uns das folgende Beispiel an:
#/bin/bash
time=8
if [ $time -lt 10 ]
then
echo "Good morning"
elif [ $time -lt 20 ]
then
echo "Good day"
else
echo "Good evening"
fi
In diesem Beispiel richten wir eine Zeit ein Variable auf 8 AM und druckte eine Nachricht basierend auf dem Zeitwert.
Erwartete Ausgabe:
Good morning
Verschachtelung von if-Anweisungen
Wenn wir uns nun mit den Grundlagen vertraut gemacht haben, können wir dieses Thema abschließen, indem wir lernen, wie man if-Anweisungen verschachtelt.
Hier ist ein Beispiel:
#/bin/bash
value=5
if [ $value -lt 10 ]
then
if [ $value -eq 5 ]
then
echo "Value equals 5"
else
echo "Value not equals 5"
fi
else
echo "value is greater than 10"
fi
Hier ist eine erwartete Ausgabe:
Value equals 5
Boolesche Operatoren
Es kann nützlich sein, mehrere Bedingungen in einem einzigen if zu prüfen Erklärung. Sie können dies tun, indem Sie die folgenden booleschen Operatoren verwenden:
- && – logisches UND.
- || – logisches ODER.
Hier ist ein kurzes Beispiel:
#!/bin/bash
username="andrei"
birthday="12/16"
today=$( date +"%m/%d")
if [ $USER = $username ] && [ $today = $birthday ]
then
echo "Happy birthday\!"
fi
In diesem einfachen Beispiel prüfen wir, ob zwei Bedingungen wahr sind:
- Der Benutzername des angemeldeten Benutzers sollte andrei sein.
- Das heutige Datum sollte der 16. Dezember sein.
Wenn beide Bedingungen zutreffen, drucken wir „Happy Birthday!“
Case-Statement
In einigen Situationen benötigen Sie möglicherweise mehr als 3 elif-Anweisungen, um Ihr Skript einzuchecken. In diesem Fall wird die Verwendung einer elif-Anweisung kompliziert. Bash bietet Ihnen eine bessere Möglichkeit, mit solchen Situationen umzugehen, indem Sie einen Case verwenden Aussage.
Hier ist die Syntax:
case VARIABLE in
VALUE_1)
COMMANDS_FOR_VALUE_1
;;
VALUE_2)
COMMANDS_FOR_VALUE_2
;;
*)
DEFAULT_COMMANDS
;;
esac
Wo:
- VARIABLE – die Variable, deren Wert mit VALUE_1 verglichen wird oder VALUE_2 .
- COMMANDS_FOR_VALUE_1 – Befehle, die ausgeführt werden, wenn VARIABLE Wert ist gleich VALUE_1 .
- COMMANDS_FOR_VALUE_2 – Befehle, die ausgeführt werden, wenn VARIABLE Wert ist gleich VALUE_2 .
- DEFAULT_COMMANDS – Befehle, die ausgeführt werden, wenn VARIABLE Wert war nicht gleich einer der oberen Bedingungen.
- Fall , in , esac – Syntaxschlüsselwörter.
Hier ist das sehr verbreitete Muster, um Eingaben für das Skript zu verarbeiten und den Dienst basierend auf dem Benutzer zu starten, zu stoppen oder neu zu starten Eingabe:
#!/bin/bash
case $1 in
start)
echo "Starting the service"
;;
stop)
echo "Stopping the service"
;;
restart)
echo "Restarting the service"
;;
*)
echo "Unknown action"
;;
esac
In diesem Beispiel prüfen wir den Wert des Sonderzeichens $1 Bash-Variable. Es enthält das erste Argument, das einem Skript bereitgestellt wird. Wenn Sie beispielsweise das obige Beispiel in einer Datei service.sh speichern und führe es so aus:
bash service.sh start
1 $ enthält das Wort „start“ als Wert.
Den Rest erledigt die Case-Anweisungslogik.
Zusammenfassung
In diesem Artikel haben wir die Grundlagen der Bash-Shell-Skripterstellung behandelt und die am häufigsten verwendeten logischen Konstrukte beschrieben, darunter einzelne if Anweisung if-else Anweisung und elif Aussage.
Wir hoffen, Sie fanden diesen Artikel hilfreich. Wenn ja, bitte, bitte, helfen Sie uns, es in der Welt zu verbreiten!