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

Shell-Scripting für Anfänger – So schreiben Sie Bash-Scripts unter Linux

Shell-Scripting ist ein wichtiger Teil der Prozessautomatisierung in Linux. Scripting hilft Ihnen, eine Folge von Befehlen in eine Datei zu schreiben und sie dann auszuführen.

Dadurch sparen Sie Zeit, da Sie bestimmte Befehle nicht immer wieder neu schreiben müssen. Sie können tägliche Aufgaben effizient ausführen und sie sogar für die automatische Ausführung planen.

Sie können auch festlegen, dass bestimmte Skripte beim Start ausgeführt werden, z. B. das Anzeigen einer bestimmten Nachricht beim Starten einer neuen Sitzung oder das Festlegen bestimmter Umgebungsvariablen.

Die Anwendungen und Verwendungen von Scripting sind zahlreich, also lassen Sie uns eintauchen.

In diesem Artikel erfahren Sie:

  1. Was ist eine Bash-Shell?
  2. Was ist ein Bash-Skript und wie erkennt man es?
  3. Wie Sie Ihr erstes Bash-Skript erstellen und ausführen.
  4. Die grundlegende Syntax von Shell-Scripting.
  5. So sehen Sie die geplanten Skripts eines Systems.
  6. Automatisieren von Skripten durch Planen über Cron-Jobs.

Am besten lernt man durch Üben. Ich empfehle Ihnen dringend, Replit zu verwenden. Sie können innerhalb von Minuten auf eine laufende Linux-Shell zugreifen.

Einführung in die Bash-Shell

Die Linux-Befehlszeile wird von einem Programm namens Shell bereitgestellt. Im Laufe der Jahre hat sich das Shell-Programm weiterentwickelt, um verschiedenen Optionen gerecht zu werden.

Unterschiedliche Benutzer können so konfiguriert werden, dass sie unterschiedliche Shells verwenden. Die meisten Benutzer ziehen es jedoch vor, bei der aktuellen Standard-Shell zu bleiben. Die Standard-Shell für viele Linux-Distributionen ist die GNU Bourne-Again Shell (bash). Auf Bash folgt die Bourne-Shell (sh ).

Wenn Sie die Shell zum ersten Mal starten, verwendet sie ein Startskript, das sich in .bashrc befindet oder .bash_profile Datei, mit der Sie das Verhalten der Shell anpassen können.

Wenn eine Shell interaktiv verwendet wird, zeigt sie ein $ an wenn es auf einen Befehl vom Benutzer wartet. Dies wird Shell-Prompt genannt.

[username@host ~]$

Wenn die Shell als Root ausgeführt wird, ändert sich die Eingabeaufforderung in # . Der Superuser-Shell-Prompt sieht folgendermaßen aus:

[root@host ~]#

Bash ist sehr leistungsfähig, da es bestimmte Operationen vereinfachen kann, die mit einer GUI nur schwer effizient zu bewerkstelligen sind. Denken Sie daran, dass die meisten Server keine GUI haben, und es ist am besten zu lernen, wie man die Möglichkeiten einer Befehlszeilenschnittstelle (CLI) nutzt.

Was ist ein Bash-Skript?

Ein Bash-Skript ist eine Reihe von Befehlen, die in eine Datei geschrieben werden. Diese werden vom Bash-Programm gelesen und ausgeführt. Das Programm wird Zeile für Zeile ausgeführt.

Sie können beispielsweise zu einem bestimmten Pfad navigieren, einen Ordner erstellen und darin mithilfe der Befehlszeile einen Prozess erzeugen.

Sie können die gleiche Abfolge von Schritten ausführen, indem Sie die Befehle in einem Bash-Skript speichern und es ausführen. Sie können das Skript beliebig oft ausführen.

Wie identifiziert man ein Bash-Skript?

Dateierweiterung von .sh .

Aufgrund von Namenskonventionen enden Bash-Skripte mit einem .sh . Bash-Skripte können jedoch problemlos ohne sh ausgeführt werden Verlängerung.

Skripte beginnen mit einem bash bang.

Skripte werden auch mit einem shebang gekennzeichnet . Shebang ist eine Kombination aus bash # und bang ! folgte dem Bash-Shell-Pfad. Dies ist die erste Zeile des Skripts. Shebang weist die Shell an, sie über die Bash-Shell auszuführen. Shebang ist einfach ein absoluter Pfad zum Bash-Interpreter.

Unten ist ein Beispiel für die Shebang-Anweisung.

#! /bin/bash

Der Pfad des Bash-Programms kann variieren. Wir werden später sehen, wie man es identifiziert.

Ausführungsrechte

Skripte haben Ausführungsrechte für den Benutzer, der sie ausführt.

Ein Ausführungsrecht wird durch x dargestellt . Im Beispiel unten hat mein Benutzer den rwx (Lesen, Schreiben, Ausführen) Rechte für die Datei test_script.sh

Dateifarbe

Ausführbare Skripte erscheinen in einer anderen Farbe als die restlichen Dateien und Ordner.

In meinem Fall erscheinen die Skripte mit Ausführungsrechten grün.

So erstellen Sie Ihr erstes Bash-Skript

Lassen Sie uns ein einfaches Skript in Bash erstellen, das Hello World ausgibt .

Erstellen Sie eine Datei namens hello_world.sh

touch hello_world.sh

Suchen Sie den Pfad zu Ihrer Bash-Shell.

which bash

In meinem Fall ist der Pfad /usr/bin/bash und ich werde dies in den Shebang aufnehmen.

Schreiben Sie den Befehl.

Wir werden echo "Hallo Welt" an die Konsole.

Unser Skript sieht in etwa so aus:

#! usr/bin/bash
echo "Hello World"

Bearbeiten Sie die Datei hello_world.sh Verwenden Sie einen Texteditor Ihrer Wahl und fügen Sie die obigen Zeilen darin ein.

Geben Sie Ihrem Benutzer Ausführungsrechte.

Ändern Sie die Dateiberechtigungen und erlauben Sie die Ausführung des Skripts, indem Sie den folgenden Befehl verwenden:

chmod u+x hello_world.sh

chmod ändert die bestehenden Rechte einer Datei für einen bestimmten Benutzer. Wir fügen +x hinzu an Benutzer u .

Führen Sie das Skript aus.

Sie können das Skript folgendermaßen ausführen:

./hello_world.sh

bash hello_world.sh .

Hier ist die Ausgabe:

Die grundlegende Syntax der Bash-Skripterstellung

Wie jede andere Programmiersprache folgt Bash-Skripting einer Reihe von Regeln, um Programme zu erstellen, die für den Computer verständlich sind. In diesem Abschnitt werden wir die Syntax von Bash-Skripten untersuchen.

Wie man Variablen definiert

Wir können eine Variable definieren, indem wir die Syntax variable_name=value verwenden . Um den Wert der Variablen zu erhalten, fügen Sie $ hinzu vor der Variable.

#!/bin/bash
# A simple variable example
greeting=Hello
name=Tux
echo $greeting $name

Tux ist auch der Name des Linux-Maskottchens, des Pinguins.

Arithmetische Ausdrücke

Nachfolgend sind die Operatoren aufgeführt, die von Bash für mathematische Berechnungen unterstützt werden:

Operator Nutzung
+ Ergänzung
- Subtraktion
* Multiplikation
/ Teilung
** Potenzierung
% Modul

Lassen Sie uns ein paar Beispiele ausführen.

Numerische Ausdrücke können mit der folgenden Syntax auch berechnet und in einer Variablen gespeichert werden:

var=$((expression))

Versuchen wir es mit einem Beispiel.

#!/bin/bash

var=$((3+9))
echo $var

Brüche werden mit den oben genannten Methoden nicht korrekt berechnet und abgeschnitten.

Für Dezimalrechnungen , können wir bc verwenden Befehl, um die Ausgabe auf eine bestimmte Anzahl von Dezimalstellen zu erhalten. bc (Bash Calculator) ist ein Befehlszeilenrechner, der Berechnungen bis zu einer bestimmten Anzahl von Dezimalstellen unterstützt.

echo "scale=2;22/7" | bc

Wobei scale definiert die Anzahl der Dezimalstellen, die in der Ausgabe benötigt werden.

So lesen Sie Benutzereingaben

Manchmal müssen Sie Benutzereingaben sammeln und relevante Vorgänge ausführen.

In Bash können wir Benutzereingaben mit read entgegennehmen Befehl.

read variable_name

Um den Benutzer mit einer benutzerdefinierten Nachricht aufzufordern, verwenden Sie -p Flagge.

read -p "Enter your age" variable_name

Beispiel:

#!/bin/bash

echo "Enter a numner"
read a

echo "Enter a numner"
read b

var=$((a+b))
echo $var

Logische Operatoren für numerische Vergleiche

Der Vergleich wird verwendet, um zu prüfen, ob Anweisungen zu true ausgewertet werden oder false . Wir können die unten gezeigten Operatoren verwenden, um zwei Aussagen zu vergleichen:

Vorgang Syntax Erklärung
Gleichheit num1 -eq num2 ist num1 gleich num2
Größer als gleich num1 -ge num2 ist num1 größer als gleich num2
Größer als num1 -gt num2 ist num1 größer als num2
Kleiner als gleich num1 -le num2 ist num1 kleiner als gleich num2
Kleiner als num1 -lt num2 ist num1 kleiner als num2
Ungleich num1 -ne num2 ist num1 ungleich num2

Syntax :

if [ conditions ]
    then
         commands
fi

Beispiel :

Lassen Sie uns zwei Zahlen vergleichen und ihre Beziehung finden:

read x
read y

if [ $x -gt $y ]
then
echo X is greater than Y
elif [ $x -lt $y ]
then
echo X is less than Y
elif [ $x -eq $y ]
then
echo X is equal to Y
fi

Ausgabe:

Bedingte Aussagen (Entscheidungsfindung)

Bedingungen sind Ausdrücke, die zu einem booleschen Ausdruck ausgewertet werden (true oder false ). Um Bedingungen zu prüfen, können wir if verwenden , if-else , if-elif-else und verschachtelte Bedingungen.

Die Struktur bedingter Anweisungen ist wie folgt:

  • if...then...fi Aussagen
  • if...then...else...fi Aussagen
  • if..elif..else..fi
  • if..then..else..if..then..fi..fi.. (Verschachtelte Bedingungen)

Syntax :

if [[ condition ]]
then
	statement
elif [[ condition ]]; then
	statement 
else
	do this by default
fi

Um aussagekräftige Vergleiche zu erstellen, können wir AND -a verwenden und ODER -o auch.

Die folgende Anweisung bedeutet übersetzt:Wenn a ist größer als 40 und b ist kleiner als 6.

if [ $a -gt 40 -a $b -lt 6 ]

Beispiel :Lassen Sie uns den Dreieckstyp finden, indem wir die Längen seiner Seiten ablesen.

read a
read b
read c

if [ $a == $b -a $b == $c -a $a == $c ]
then
echo EQUILATERAL

elif [ $a == $b -o $b == $c -o $a == $c ]
then 
echo ISOSCELES
else
echo SCALENE

fi

Ausgabe :

Testfall #1

Testfall #2

Testfall #3

Schleifen und überspringen

Mit For-Schleifen können Sie Anweisungen eine bestimmte Anzahl von Malen ausführen.

Schleifen mit Zahlen:

Im Beispiel unten wird die Schleife 5 mal durchlaufen.

#!/bin/bash

for i in {1..5}
do
    echo $i
done

Looping mit Strings:

Wir können Strings auch durchlaufen.

#!/bin/bash

for X in cyan magenta yellow  
do
	echo $X
done

While-Schleife

While-Schleifen suchen nach einer Bedingung und durchlaufen eine Schleife, bis die Bedingung true bleibt . Wir müssen eine Zähleranweisung bereitstellen, die den Zähler für die Ausführung der Regelschleife erhöht.

Im folgenden Beispiel (( i += 1 )) ist die Zähleranweisung, die den Wert von i erhöht .

Beispiel:

#!/bin/bash
i=1
while [[ $i -le 10 ]] ; do
   echo "$i"
  (( i += 1 ))
done

Dateien lesen

Angenommen, wir haben eine Datei sample_file.txt wie unten gezeigt:

Wir können die Datei Zeile für Zeile lesen und die Ausgabe auf dem Bildschirm ausdrucken.

#!/bin/bash

LINE=1

while read -r CURRENT_LINE
	do
		echo "$LINE: $CURRENT_LINE"
    ((LINE++))
done < "sample_file.txt"

Ausgabe:

Wie man Befehle mit Backticks ausführt

Wenn Sie die Ausgabe eines komplexen Befehls in Ihr Skript einfügen müssen, können Sie die Anweisung in Backticks schreiben.

Syntax:

var=` commands `

Beispiel :Angenommen, wir wollen die Ausgabe einer Liste von Einhängepunkten mit tmpfs erhalten in ihrem Namen. Wir können eine Anweisung wie diese erstellen:df -h | grep tmpfs .

Um es in das Bash-Skript aufzunehmen, können wir es in Backticks einschließen.

#!/bin/bash

var=`df -h | grep tmpfs`
echo $var

Ausgabe:

Wie man Argumente für Skripte von der Befehlszeile erhält

Es ist möglich, dem Skript bei der Ausführung Argumente zu geben.

$@ stellt die Position der Parameter dar, beginnend bei eins.

#!/bin/bash

for x in $@
do
    echo "Entered arg is $x"
done

Führen Sie es so aus:

./script arg1 arg2

Automatisieren von Skripten durch Planen über Cronjobs

Cron ist ein Dienstprogramm zur Auftragsplanung, das in Unix-ähnlichen Systemen vorhanden ist. Sie können Jobs so planen, dass sie täglich, wöchentlich, monatlich oder zu einer bestimmten Tageszeit ausgeführt werden. Die Automatisierung in Linux ist stark von Cron-Jobs abhängig.

Unten ist die Syntax zum Planen von Crons:

# Cron job example
* * * * * sh /path/to/script.sh

Hier, * repräsentiert jeweils Minute(n) Stunde(n) Tag(e) Monat(e) Wochentag(e).

Nachfolgend finden Sie einige Beispiele für das Planen von Cron-Jobs.

ZEITPLAN PLANWERT
5 0 * 8 * Um 00:05 im August.
5 4 * * 6 Am Sonntag um 04:05 Uhr.
0 22 * ​​* 1-5 Um 22:00 Uhr an jedem Wochentag von Montag bis Freitag.

In diesem Blogbeitrag erfahren Sie mehr über Cron.

Vorhandene Skripte in einem System überprüfen

crontab verwenden

crontab -l listet die bereits geplanten Skripte für einen bestimmten Benutzer auf.

Verwendung des Find-Befehls

Der find Der Befehl hilft, Dateien basierend auf bestimmten Mustern zu finden. Da die meisten Skripte mit .sh enden , können wir das find-Skript wie folgt verwenden:

find . -type f -name "*.sh"

Wo,

  • . stellt das aktuelle Verzeichnis dar. Sie können den Pfad entsprechend ändern.
  • -type f gibt an, dass der Dateityp, nach dem wir suchen, eine textbasierte Datei ist.
  • *.sh teilt mit, dass alle Dateien mit der Endung .sh abgeglichen werden sollen .

Wenn Sie daran interessiert sind, mehr über den Find-Befehl im Detail zu erfahren, lesen Sie meinen anderen Beitrag.

Abschluss

In diesem Tutorial haben wir die Grundlagen des Shell-Skriptings gelernt. Wir haben uns Beispiele und Syntax angesehen, die uns helfen können, sinnvolle Programme zu schreiben.

Was ist Ihre Lieblingssache, die Sie aus diesem Tutorial gelernt haben? Lass es mich auf Twitter wissen!

Du kannst meine anderen Posts hier lesen.

Arbeitsvektor erstellt von macrovector - www.freepik.com


Linux
  1. Linux-Scripting:3 Anleitungen für While-Schleifen in Bash

  2. Wie parse ich Json mit Shell-Scripting in Linux?

  3. Wie testet man die Posix-Konformität von Shell-Skripten?

  4. So codieren Sie ein Bild mit Base64 in Linux Bash / Shell

  5. Wie geht Linux mit Shell-Skripten um?

Bash-Scripting:So schreiben Sie Daten in Textdateien

So verwenden Sie den Declare-Befehl in der Linux Bash Shell

So verwenden Sie den Echo-Befehl in Bash-Skripten unter Linux

So installieren Sie Linux Bash Shell unter Windows 10

Bash-Skripting:So geben Sie Text in der Linux-Shell aus und formatieren ihn

Wie verwende ich die Linux-Bash-Shell in Windows 10?