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

Shell-Scripting Schritt-für-Schritt-Tutorial

In diesem Tutorial werden wir über Shell-Skripting sprechen und wie Sie Ihr erstes Shell-Skript erstellen. Sie werden im Allgemeinen Shell-Skripte genannt, aber wir werden sie Bash-Skripte nennen, weil wir Bash neben den anderen Linux-Shells verwenden werden.

Es gibt zsh, tcsh, ksh und andere Shells.

In den vorherigen Beiträgen haben wir gesehen, wie man die Bash-Shell verwendet und wie man Linux-Befehle verwendet.

Das Konzept eines Bash-Skripts besteht darin, eine Reihe von Befehlen auszuführen, um Ihre Arbeit zu erledigen.

Um mehrere Befehle in einem einzigen Schritt von der Shell aus auszuführen, können Sie sie in einer Zeile eingeben und durch Semikolons trennen.

pwd ; whoami

Dies ist ein Bash-Skript!!

Der Befehl pwd wird zuerst ausgeführt und zeigt das aktuelle Arbeitsverzeichnis an, dann wird der Befehl whoami ausgeführt, um die derzeit angemeldeten Benutzer anzuzeigen.

Sie können beliebig viele Befehle ausführen, jedoch mit einem Limit. Sie können Ihre maximalen Argumente mit diesem Befehl bestimmen.

 getconf ARG_MAX

Nun, was ist mit dem Einfügen der Befehle in eine Datei, und wenn wir diese Befehle ausführen müssen, führen wir nur diese Datei aus. Dies wird als Bash-Skript bezeichnet.

Erstellen Sie zuerst eine neue Datei mit dem Touch-Befehl. Am Anfang jedes Bash-Skripts sollten wir definieren, welche Shell wir verwenden werden, denn es gibt viele Shells unter Linux, die Bash-Shell ist eine davon.

Shell-Skript-Kram

Die erste Zeile, die Sie beim Schreiben eines Bash-Skripts eingeben, ist das (#!), gefolgt von der Shell, die Sie verwenden werden.

#! <===dieses Zeichen heißt shebang.

#!/bin/bash

Wenn Sie das Nummernzeichen (#) vor einer beliebigen Zeile in Ihrem Shell-Skript verwenden, wird diese Zeile zu einem Kommentar, was bedeutet, dass sie nicht verarbeitet wird, aber die obige Zeile ist ein Sonderfall . Diese Zeile definiert, welche Shell wir verwenden werden, in unserem Fall die Bash-Shell.

Die Shell-Befehle werden wie folgt pro Zeile eingegeben:

#!/bin/bash

# This is a comment

pwd

whoami

Sie können mehrere Befehle in derselben Zeile eingeben, aber Sie müssen sie durch Semikolons trennen, aber es ist vorzuziehen, Befehle in separate Zeilen zu schreiben; dies erleichtert das spätere Lesen.

Skriptberechtigung festlegen

Nachdem Sie Ihr Shell-Skript geschrieben haben, speichern Sie die Datei.

Stellen Sie diese Datei nun so ein, dass sie ausführbar ist; andernfalls wird Ihnen die Berechtigung verweigert. Sie können nachlesen, wie Sie Berechtigungen mit dem Befehl chmod festlegen.

chmod +x ./myscript

Versuchen Sie dann, es auszuführen, indem Sie es einfach in die Shell eingeben:

./myscript

Und ja, es wird ausgeführt.

Erstellen Sie Ihr erstes Bash-Skript

Wie wir aus anderen Beiträgen wissen, erfolgt das Drucken von Text über das

echo

Befehl.

Bearbeiten Sie Ihre Datei und geben Sie Folgendes ein:

#!/bin/bash

# our comment is here

echo "The current directory is:"

pwd

echo "The user logged in is:"

whoami

Sehen Sie sich die Ausgabe an:

Perfekt! Jetzt können wir Befehle ausführen und Text anzeigen:

echo

Wenn Sie den echo-Befehl nicht kennen oder wissen, wie man eine Datei bearbeitet, empfehle ich Ihnen, frühere Artikel über grundlegende Linux-Befehle zu lesen.

Variablen verwenden

Mit Variablen können Sie Informationen speichern, um sie in Ihrem Skript zu verwenden.

Sie können in Ihrem Shell-Skript zwei Arten von Variablen definieren:

  • Umgebungsvariablen
  • Benutzervariablen

Umgebungsvariablen

Manchmal müssen Sie mit Systemvariablen interagieren; Sie können dies tun, indem Sie Umgebungsvariablen verwenden.

#!/bin/bash

# display user home

echo "Home for the current user is: $HOME"

Beachten Sie, dass wir die Systemvariable $HOME in doppelte Anführungszeichen gesetzt haben und die Home-Variable korrekt ausgibt.

Was ist, wenn wir das Dollarzeichen selbst drucken möchten?

echo "I have $1 in my pocket"

Da die Variable $1 nicht existiert, funktioniert sie nicht. Wie kann man das also überwinden?

Sie können das Escape-Zeichen, das der umgekehrte Schrägstrich \ vor dem Dollarzeichen ist, wie folgt verwenden:

echo "I have \$1 in my pocket"

Jetzt funktioniert es!!

Benutzervariablen

Außerdem können Sie Ihre benutzerdefinierten Variablen im Skript festlegen und verwenden.

Sie können Benutzervariablen auf die gleiche Weise wie folgt aufrufen:

#!/bin/bash

# User variables

grade=5

person="Adam"

echo "$person is a good boy, he is in grade $grade"

chmod +x myscript

./myscript

Befehlsersetzung

Mithilfe der Befehlssubstitution können Sie Informationen aus dem Ergebnis eines Befehls extrahieren.

Sie können die Befehlsersetzung mit einer der folgenden Methoden durchführen:

  • Das Backtick-Zeichen (`).
  • Das $()-Format.

Stellen Sie sicher, dass es sich bei der Eingabe des Backtick-Zeichens nicht um das einfache Anführungszeichen handelt.

Sie müssen den Befehl wie folgt in zwei Backticks einschließen:

mydir=`pwd`

Oder umgekehrt:

mydir=$(pwd)

Das Skript könnte also so aussehen:

#!/bin/bash

mydir=$(pwd)

echo $mydir

Sie können die Ausgabe des Befehls in der mydir-Variablen speichern.

Mathematische Berechnung

Sie können grundlegende mathematische Berechnungen im Format $(( 2 + 2 )) durchführen:

#!/bin/bash

var1=$(( 5 + 5 ))

echo $var1

var2=$(( $var1 * 2 ))

echo $var2

So einfach.

wenn-dann-Anweisung

Ihre Shell-Skripte benötigen bedingte Anweisungen. Wenn der Wert kleiner als 10 ist, tun Sie dies, sonst tun Sie das. Sie können sich jede beliebige Logik vorstellen.

Die grundlegendste Struktur der Wenn-Dann-Anweisung sieht folgendermaßen aus:

wenn Befehl; dann

etwas tun

fi

und hier ist ein Beispiel:

#!/bin/bash

if whoami; then

	echo "It works"

fi

Da die

whoami

gibt meinen Benutzer zurück, sodass die Bedingung wahr zurückgibt und die Nachricht gedruckt wird.

Lassen Sie uns tiefer graben und andere Befehle verwenden, die wir kennen.

Überprüfen Sie, ob ein Benutzer existiert

Vielleicht die Suche nach einem bestimmten Benutzer in der Benutzerdatei

/etc/passwd

und wenn ein Datensatz existiert, teilen Sie mir das in einer Nachricht mit.

#!/bin/bash

user=likegeeks

if grep $user /etc/passwd; then

	echo "No such a user $user"

fi

Wir verwenden die

/etc/passwd

Datei. Sie können unser Tutorial über den grep-Befehl lesen.

Wenn der Benutzer existiert, gibt das Shell-Skript die Nachricht aus.

Was ist, wenn der Benutzer nicht existiert? Das Skript beendet die Ausführung, ohne uns mitzuteilen, dass der Benutzer nicht existiert. OK, verbessern wir das Skript weiter.

if-then-else-Anweisung

Die if-then-else-Anweisung hat die folgende Struktur:

wenn Befehl; dann

etwas tun

sonst

etwas anderes tun

fi

Wenn der erste Befehl ausgeführt wird und Null zurückgibt, was Erfolg bedeutet, trifft er die Befehle nach der else-Anweisung nicht; andernfalls, wenn die if-Anweisung einen Wert ungleich Null zurückgibt; was bedeutet, dass die Anweisungsbedingung fehlschlägt, in diesem Fall trifft die Shell die Befehle nach der else-Anweisung.

#!/bin/bash

user=anotherUser

if grep $user /etc/passwd; then

	echo "The user $user Exists"

else

	echo "The user $user doesn’t exist"

fi

Bis jetzt geht es uns gut, bleiben Sie in Bewegung.

Was ist nun, wenn wir weitere else-Anweisungen benötigen?

Nun, das ist einfach, wir können das erreichen, indem wir if-Anweisungen wie folgt verschachteln:

wenn Bedingung1; dann

Befehle

elf Bedingung2; dann

Befehle

fi

Wenn der erste Befehl Null zurückgibt; bedeutet Erfolg, es wird die Befehle danach ausführen, andernfalls, wenn der zweite Befehl Null zurückgibt, werden die Befehle danach ausgeführt, andernfalls, wenn keiner von diesen Null zurückgibt, werden nur die letzten Befehle ausgeführt.

#!/bin/bash

user=anotherUser

if grep $user /etc/passwd; then

	echo "The user $user Exists"

elif ls /home; then

	echo "The user doesn’t exist"

fi

Sie können sich jedes Szenario vorstellen, vielleicht, wenn der Benutzer nicht existiert, erstellen Sie einen Benutzer mit dem

useradd

befehlen oder etwas anderes tun.

Tests kombinieren

Sie können mehrere Tests mit den Befehlen AND (&&) oder OR (||) kombinieren.

#!/bin/bash

dir=/home/likegeeks

name="likegeeks"

if [ -d $dir ] && [ -n $name ]; then

	echo "The name exists and the folder $dir exists."

else

	echo "One test failed"

fi

Dieses Beispiel gibt nur dann true zurück, wenn beide Tests erfolgreich waren; andernfalls schlägt es fehl.

Sie können auch OR (||) auf die gleiche Weise verwenden:

#!/bin/bash

dir=/home/likegeeks

name="likegeeks"

if [ -d $dir ] || [ -n $name ]; then

	echo "Success!"

else

	echo "Both tests failed"

fi

Dieses Beispiel würde Erfolg zurückgeben, wenn einer oder beide erfolgreich waren.

Es würde nur scheitern, wenn beide scheitern.

Numerische Vergleiche

Sie können einen numerischen Vergleich zwischen zwei numerischen Werten durchführen, indem Sie numerische Vergleichsprüfungen wie folgt verwenden:

Zahl1 -eq Zahl2 Überprüft, ob Zahl1 gleich Zahl2 ist.

Zahl1 -ge Zahl2 Überprüft, ob Zahl1 größer oder gleich Zahl2 ist.

Zahl1 -gt Zahl2 Überprüft, ob Zahl1 größer als Zahl2 ist.

Zahl1 -le Zahl2 Überprüft, ob Zahl1 kleiner oder gleich Zahl2 ist.

Zahl1 -lt Zahl2 Überprüft, ob Zahl1 kleiner als Zahl2 ist.

Zahl1 -ne Zahl2 Überprüft, ob Zahl1 nicht gleich Zahl2 ist.

Als Beispiel werden wir einen davon ausprobieren, der Rest ist gleich.

Beachten Sie, dass die Vergleichsanweisung wie gezeigt in eckigen Klammern steht.

#!/bin/bash

num=11

if [ $num -gt 10]; then

	echo "$num is bigger than 10"

else

	echo "$num is less than 10"

fi

Die Zahl ist größer als zehn, also wird die erste Anweisung ausgeführt und das erste Echo ausgegeben.

String-Vergleiche

Sie können Strings auf eine der folgenden Arten vergleichen:

string1 =string2 Prüft, ob string1 identisch mit string2 ist.

string1 !=string2 Prüft, ob string1 nicht identisch mit string2 ist.

string1

string1> string2 Prüft, ob string1 größer als string2 ist.

-n Zeichenfolge1 Überprüft, ob Zeichenfolge1 länger als Null ist.

-z Zeichenfolge1 Überprüft, ob Zeichenfolge1 die Länge Null hat.

Wir können einen String-Vergleich auf unser Beispiel anwenden:

#!/bin/bash

user="likegeeks"

if [ $user = $USER ]; then

	echo "The user $user&nbsp; is the current logged in user"

fi

Ein kniffliger Hinweis zu größer als und kleiner als für Zeichenfolgenvergleiche MÜSSEN mit dem Backslash maskiert werden denn wenn Sie nur das Größer-als-Symbol verwenden, werden falsche Ergebnisse angezeigt.

Sie sollten es also so machen:

#!/bin/bash

v1=text

v2="another text"

if [ $v1 \> "$v2" ]; then

	echo "$v1 is greater than $v2"

else

	echo "$v1 is less than $v2"

fi

Es läuft, aber es gibt diese Warnung:

./myscript: line 5: [: too many arguments

Um das Problem zu beheben, schließen Sie $vals in doppelte Anführungszeichen ein und erzwingen, dass es wie folgt als eine Zeichenfolge bleibt:

#!/bin/bash

v1=text

v2="another text"

if [ $v1 \> "$v2" ]; then

	echo "$v1 is greater than $v2"

else

	echo "$v1 is less than $v2"

fi

Eine kritische Anmerkung zu größer als und kleiner als für Stringvergleiche. Sehen Sie sich das folgende Beispiel an, um den Unterschied zu verstehen:

#!/bin/bash

v1=Likegeeks

v2=likegeeks

if [ $v1 \> $v2 ]; then

	echo "$v1 is greater than $v2"

else

	echo "$v1 is less than $v2"

fi

sort myfile

wie Geeks

LikeGeeks

Die Testbedingung betrachtet Kleinbuchstaben größer als Großbuchstaben.

sort

Im Gegensatz zum Sortierbefehl, der das Gegenteil bewirkt.

Die Testbedingung basiert auf der ASCII-Reihenfolge.

sort

Während der Sortierbefehl auf den Nummerierungsreihenfolgen aus den Systemeinstellungen basiert.

Dateivergleiche

Mit den folgenden Operatoren können Sie Dateien vergleichen und nach Dateien suchen:

-d my_file Überprüft, ob es sich um einen Ordner handelt.

-e my_file Überprüft, ob die Datei verfügbar ist.

-f my_file Überprüft, ob es sich um eine Datei handelt.

-r my_file Überprüft, ob sie lesbar ist.

meine_datei nt my_file2 Prüft, ob my_file neuer ist als meine_datei2.

meine_datei ot my_file2 Prüft, ob my_file älter ist als meine_datei2.

-O my_file Überprüft, ob der Eigentümer der Datei und der angemeldete Benutzer übereinstimmen.

-G my_file Überprüft, ob die Datei und der angemeldete Benutzer eine identische Gruppe haben.

Wie sie implizieren, werden Sie sie nie vergessen.

Wählen wir einen davon aus und nehmen ihn als Beispiel:

#!/bin/bash

mydir=/home/likegeeks

if [ -d $mydir ]; then

	echo "Directory $mydir exists"

	cd $mydir

	ls

else

	echo "NO such file or directory $mydir"

fi

Wir werden nicht jeden von ihnen als Beispiel eingeben. Sie geben einfach den Vergleich zwischen den eckigen Klammern ein und vervollständigen Ihr Skript normal.

Es gibt einige andere erweiterte Wenn-Dann-Funktionen, aber machen wir sie in einem anderen Beitrag.

Das ist für jetzt. Ich hoffe, es gefällt dir und du übst immer mehr.

Danke.


Linux
  1. Dateideskriptoren und Shell-Scripting?

  2. Anzeigen von Inhalten mit dem höchsten Wert in Shell-Skripten?

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

  4. Anweisung blockiert Mechanismus im Shell-Scripting?

  5. Sollte ich Apt oder Apt-get In Shell Scripting verwenden?

Bash-Scripting-Tutorial für Anfänger

Was ist Shebang in Linux Shell Scripting?

Shell-Scripting Teil 4 – Eingabe, Ausgabe und Umleitung

Effektive Verwaltung von Linux-Zeitzonen (Schritt-für-Schritt-Anleitung)

Bash Scripting Einführungstutorial mit 5 praktischen Beispielen

Tutorial zu Bash-Shell-Funktionen mit 6 praktischen Beispielen