Grundlegende Bedienung von Linux (Shell-Skript schreiben)

Wenn das Bild im Artikel wieder auflegt, gehen Sie bitte zum offiziellen Konto, um dies zu überprüfen 

Schließlich bin ich zum Kapitel über Shell-Skripte gekommen. Ich habe in der Vergangenheit viele Artikel verkauft, um darüber zu sprechen, wie wichtig Shell-Skripte sind. Es ist wahr, dass Shell-Skripte für den Betrieb und die Wartung von Linux-Systemadministratoren sehr wichtig sind. Der folgende Autor führt Sie offiziell in die Welt des Shell-Scripting ein.

Verstehst du bisher, was ein Shell-Skript ist? Wenn Sie es am besten verstehen, spielt es keine Rolle, wenn Sie es nicht verstehen. Ich glaube, wenn Sie Ihr Studium vertiefen, werden Sie sich immer mehr bewusst, was ein Shell-Skript ist. Erstens ist es ein Skript und kann nicht als formale Programmiersprache verwendet werden. Da es in der Linux-Shell ausgeführt wird, wird es als Shell-Skript bezeichnet. Ein Shell-Skript ist eine Sammlung von Befehlen. Zum Beispiel möchte ich diesen Vorgang ausführen: 1) Geben Sie das Verzeichnis / tmp / ein; 2) Listen Sie alle Dateinamen im aktuellen Verzeichnis auf; 3) Kopieren Sie alle aktuellen Dateien in das Verzeichnis / root /; 4) Löschen Sie alle Dateien im Verzeichnis Aktuelles Verzeichnis. In den einfachen 4 Schritten müssen Sie den Befehl viermal in das Shell-Fenster eingeben und viermal die Eingabetaste drücken. Ist das lästig? Natürlich sind diese 4 Schritte sehr einfach. Was ist, wenn es sich um eine komplexere Befehlseinstellung handelt, die Dutzende von Vorgängen erfordert? Es wäre mühsam, einzeln auf der Tastatur zu tippen. Sie können also genauso gut alle Vorgänge in einem Dokument aufzeichnen und dann die Befehle im Dokument aufrufen, damit der Vorgang in einem Schritt ausgeführt werden kann. Tatsächlich ist dieses Dokument ein Shell-Skript, aber dieses Shell-Skript hat ein spezielles Format.

Shell-Skripte können uns dabei helfen, den Server sehr bequem zu verwalten, da wir einen Taskplan angeben können, um ein bestimmtes Shell-Skript auszuführen, das unseren Anforderungen entspricht. Dies ist eine sehr stolze Sache für Linux-Systemadministratoren. Das aktuelle 139-Postfach ist sehr einfach zu verwenden. Beim Senden von E-Mails können Sie auch eine E-Mail-Benachrichtigungs-SMS an den Benutzer senden. Auf diese Weise können wir ein Überwachungs-Shell-Skript auf unserem Linux-Server bereitstellen, z Der Server Wenn der Webserver gestoppt ist, können Sie eine E-Mail an den Administrator senden und gleichzeitig eine Alarmmeldung an den Administrator senden, damit wir rechtzeitig feststellen können, dass ein Problem mit dem Server vorliegt.

Es gibt ein Problem, das vereinbart werden muss. Es wird empfohlen, alle benutzerdefinierten Skripte im Verzeichnis / usr / local / sbin / abzulegen. Dies dient dazu, die Dokumente besser zu verwalten, und zweitens den Administrator, der Sie im Verzeichnis / usr / local / sbin / verwaltet Die Zukunft wird wissen, wo benutzerdefinierte Skripte für eine einfache Wartung abgelegt werden müssen.

[ Die Grundstruktur von Shell- Skripten und wie man sie ausführt ]

 

 

Shell-Skripte haben normalerweise das Suffix .sh. Dies bedeutet nicht, dass das Skript nicht ohne .sh ausgeführt werden kann, es ist nur eine Gewohnheit aller. Wenn Sie also in Zukunft eine Datei mit dem Suffix .sh finden, muss es sich um ein Shell-Skript handeln. Die erste Zeile in test.sh muss "#! / Bin / bash" sein, was bedeutet, dass die Datei die Bash-Syntax verwendet. Wenn diese Zeile nicht festgelegt ist, kann Ihr Shell-Skript nicht ausgeführt werden. '#' bedeutet einen Kommentar, wie bereits erwähnt. Gefolgt von einigen verwandten Kommentaren des Skripts sowie dem Autor, dem Erstellungsdatum oder der Version usw. Natürlich sind diese Kommentare nicht erforderlich. Wenn Sie faul sind, können Sie sie weglassen, aber der Autor empfiehlt nicht, sie wegzulassen. Denn mit zunehmender Arbeitszeit werden Sie immer mehr Shell-Skripte schreiben. Wenn Sie eines Tages auf ein Skript zurückblicken, das Sie geschrieben haben, vergessen Sie möglicherweise, wofür das Skript gedacht ist und wann Sie es geschrieben haben. Es ist also notwendig, einen Kommentar zu schreiben. Außerdem sind Sie nicht der Systemadministrator. Wenn ein anderer Administrator Ihr Skript anzeigt, wäre es nicht sehr deprimierend, wenn er es nicht versteht. Unter dem Skript befindet sich der auszuführende Befehl.

Die Ausführung des Shell-Skripts ist sehr einfach, nur "sh filename" direkt, und Sie können es auch so ausführen

 

 

Standardmäßig verfügt das mit vim bearbeitete Dokument nicht über eine Ausführungsberechtigung. Sie müssen daher eine Ausführungsberechtigung hinzufügen, damit Sie dieses Skript direkt mit './ Dateiname' ausführen können. Wenn Sie den Befehl sh zum Ausführen eines Shell-Skripts verwenden, können Sie außerdem die Option -x hinzufügen, um den Ausführungsprozess des Skripts anzuzeigen. Dies hilft uns beim Debuggen, wenn das Skript falsch ist.

 

 

Das Befehlsdatum 'wird in diesem Shell-Skript verwendet und dient zum Drucken der aktuellen Systemzeit. Tatsächlich ist die Datumsverwendungsrate in Shell-Skripten sehr hoch. Es gibt verschiedene Optionen, die ich häufig in Shell-Skripten verwende:

 

 

% Y bedeutet Jahr,% m bedeutet Monat,% d bedeutet Datum,% H bedeutet Stunde,% M bedeutet Minute,% S bedeutet Sekunde

 

 

Beachten Sie den Unterschied zwischen% y und% Y.

 

 

 

 

Die Option -d wird auch häufig verwendet. Sie kann das Datum vor n Tagen oder n Tagen später und natürlich auch das Datum vor n Monaten / Jahren oder später drucken.

 

 

Darüber hinaus wird häufig auch der Wochentag verwendet

 

 

[ Variablen in Shell- Skripten ]

Die Verwendung von Variablen in Shell-Skripten macht unsere Skripte professioneller und eher wie eine Sprache. Nur ein Scherz, die Rolle von Variablen ist natürlich nicht für die Professionalität. Wenn Sie ein Shell-Skript mit 1000 Zeilen schreiben und ein bestimmter Befehl oder Pfad hunderte Male im Skript angezeigt wird. Plötzlich haben Sie das Gefühl, dass der Pfad falsch ist und möchten ihn ändern. Wäre es nicht notwendig, ihn hunderte Male zu ändern? Obwohl Sie den Befehl zum Ersetzen von Stapeln verwenden können, ist er auch sehr problematisch, und das Skript scheint sehr aufgebläht zu sein. Die Rolle von Variablen wird verwendet, um dieses Problem zu lösen.

 

 

Backticks werden in test2.sh verwendet. Erinnern Sie sich an seine Funktion? 'd' und'd1 'werden im Skript als Variablen angezeigt, und das Format der Definition der Variablen lautet "Variablenname = Variablenwert". Wenn Sie auf Variablen im Skript verweisen, müssen Sie das Symbol '$' hinzufügen, das mit den zuvor erwähnten benutzerdefinierten Variablen in der Shell übereinstimmt. Werfen wir einen Blick auf die Ergebnisse der Skriptausführung.

 

 

Unten verwenden wir die Shell, um die Summe zweier Zahlen zu berechnen.

 

 

Mathematische Berechnungen sollten in '[]' eingeschlossen sein und ein '$' sollte an der Außenseite angebracht sein. Das Skriptergebnis lautet:

 

 

Shell-Skripte können auch mit Benutzern interagieren.

 

 

Dies verwendet den Befehl read, mit dem der Wert der Variablen aus der Standardeingabe gefolgt vom Variablennamen abgerufen werden kann. "Read x" bedeutet, dass der Wert der x-Variablen vom Benutzer über die Tastatur eingegeben werden muss. Der Skriptausführungsprozess ist wie folgt:

 

 

Wir können auch die Option -x hinzufügen, um einen Blick auf diesen Ausführungsprozess zu werfen:

In test4.sh gibt es einen prägnanteren Weg.

 

 

Die Option read -p ähnelt echo. Die Ausführung ist wie folgt:

 

 

Haben Sie jemals einen solchen Befehl "/etc/init.d/iptables restart" verwendet? Die Datei /etc/init.d/iptables davor ist eigentlich ein Shell-Skript. Warum kann darauf ein "Neustart" folgen? beinhaltet die Shell Die voreingestellten Variablen des Skripts. Tatsächlich kann dem Shell-Skript bei der Ausführung Variablen folgen, und es können auch mehrere Variablen folgen. Mögen Sie ebenso wie der Autor ein Skript schreiben, werden Sie verstehen.

 

 

Der Ausführungsprozess ist wie folgt:

 

 

Würden Sie sich im Skript fragen, woher die $ 1 und $ 2 stammen, die eigentlich die Standardvariablen des Shell-Skripts sind, wobei der Wert von $ 1 der Wert 1 ist, der während der Ausführung eingegeben wurde, und der Wert von $ 2 der Wert ist, der während der Ausführung eingegeben wurde Ausführung $ 2 Natürlich gibt es keine Begrenzung für die Standardvariablen eines Shell-Skripts, diesmal verstehen Sie. Es gibt auch eine $ 0, die jedoch den Namen des Skripts selbst darstellt. Möglicherweise möchten Sie das Skript ändern.

 

 

Sie müssen das Ergebnis der Ausführung erraten haben.

 

 

[ Logisches Urteil in Shell- Schrift ]

Wenn Sie C oder andere Sprachen gelernt haben, werden Sie mit if nicht unbekannt sein. Wir können auch if-Logik verwenden, um in Shell-Skripten zu beurteilen. Die grundlegende Syntax des if-Urteils in der Shell lautet:

1 ) Ohne sonst

wenn Urteilserklärung, dann

Befehl

Sein

 

 

Das Formular ((a <60)) wird in if1.sh angezeigt. Dies ist ein eindeutiges Format in Shell-Skripten. Wenn Sie eine Klammer verwenden oder diese nicht verwenden, wird eine Fehlermeldung angezeigt. Bitte beachten Sie dieses Format. Das Ausführungsergebnis ist

 

 

2 ) Mit sonst

wenn Urteilserklärung, dann

Befehl

sonst

Befehl

Sein

 

 

Die Ergebnisse der Implementierung sind:

 

 

3 ) Mit elif

wenn Urteil Aussage eins, dann

Befehl

elif Urteilssatz zwei, dann

Befehl

sonst

Befehl

Sein

 

 

Hier bedeutet && "und", natürlich können Sie auch || verwenden, um "oder", das Ausführungsergebnis, zu bedeuten:

 

 

Das Obige ist nur eine kurze Einführung in die Struktur der if-Anweisung. Zusätzlich zur Form von "(())" können Sie bei der Beurteilung der Größe des Werts auch "[]" verwenden. Sie können jedoch keine Symbole wie>, <, = verwenden. Sie müssen -lt (kleiner als), -gt (größer als), -le (kleiner als oder gleich), -ge (größer als oder gleich) verwenden ), -eq (gleich), -ne (ungleich).

 

 

Schauen wir uns die Verwendung von && und || in if an.

 

 

Beurteilt in Shell-Skripten häufig auch Dateiattribute, z. B. die Beurteilung, ob es sich um eine normale Datei oder ein Verzeichnis handelt, und die Beurteilung, ob die Datei Lese- / Schreibausführungsberechtigungen hat. Es gibt auch einige häufig verwendete Optionen:

-e: Bestimmen Sie, ob die Datei oder das Verzeichnis vorhanden ist

-d: Bestimmen Sie, ob es sich um ein Verzeichnis handelt und ob es existiert

-f: Bestimmen Sie, ob es sich um eine normale Datei handelt und ob diese vorhanden ist

-r: Bestimmen Sie, ob das Dokument über Leseberechtigung verfügt

-w: Bestimmen Sie, ob eine Schreibberechtigung vorhanden ist

-x: Bestimmen Sie, ob es ausführbar ist

Wenn Sie if verwenden, um zu beurteilen, lautet das spezifische Format: if [-e Dateiname]; then

 

 

In Shell-Skripten gibt es neben der Verwendung von if zur Beurteilung der Logik auch einen gängigen Weg, dh den Fall. Das spezifische Format ist:

Fallvariable in

Wert1)

Befehl

;;

Wert2)

Befehl

;;

Wert3)

Befehl

;;

*)

Befehl

;;

esac

In der obigen Struktur gibt es keine Begrenzung für die Anzahl der Werte, und * repräsentiert andere Werte als den obigen Wert. Als nächstes schreibt der Autor ein Skript, um festzustellen, ob der Eingabewert ungerade oder gerade ist.

 

 

Der Wert von $ a ist entweder 1 oder 0, das Ausführungsergebnis ist:

 

 

Sie können sich auch den Ausführungsprozess ansehen:

Das Fall-Skript wird häufig zum Schreiben von Startskripten für Systemdienste verwendet. Beispielsweise wird es in /etc/init.d/iptables verwendet. Möglicherweise möchten Sie es auschecken.

[ Schleife im Shell- Skript ]

Shell-Skript kann auch als einfache Programmiersprache angesehen werden, natürlich sind Schleifen unverzichtbar. Die häufig verwendeten Schleifen sind für Schleifen und while-Schleifen. Die Struktur der beiden Schleifen wird nachstehend separat vorgestellt.

 

 

Die Sequenz 1 5 im Skript repräsentiert eine Sequenz von 1 bis 5. Sie können diesen Befehl direkt ausführen, um ihn zu testen. Das Ergebnis der Skriptausführung lautet:

 

 

Durch dieses Skript können Sie die Grundstruktur der for-Schleife sehen:

für Variablennamen in Schleifenbedingung; do

Befehl

erledigt

Der Bedingungsteil der Schleife kann auch in dieser Form geschrieben werden, getrennt durch Leerzeichen. Sie können auch versuchen, für i in `ls`; echo $ i; done und für i in` cat test.txt`; echo $ i; done

Schauen wir uns diese while-Schleife noch einmal an. Das Grundformat lautet:

während 条件; machen

Befehl

erledigt

Das Ausführungsergebnis des Skripts lautet:

 

 

Außerdem können Sie die Schleifenbedingung ignorieren. Ich schreibe häufig solche Überwachungsskripte.

während :; machen

Befehl

erledigt

 

 

 

 

[ Funktionen in Shell- Skripten ]

Wenn Sie Entwicklung studiert haben, müssen Sie die Rolle von Funktionen kennen. Wenn Sie mit diesem Konzept noch nicht vertraut sind, spielt es keine Rolle, es ist tatsächlich sehr einfach zu verstehen. Die Funktion besteht darin, ein Stück Code in einer kleinen Einheit zu organisieren und dieser kleinen Einheit einen Namen zu geben. Wenn dieser Code verwendet wird, kann er direkt den Namen der kleinen Einheit aufrufen. Manchmal wird ein bestimmter Abschnitt des Skripts immer wiederholt verwendet. Wenn er als Funktion geschrieben wird, kann er bei jeder Verwendung durch den Funktionsnamen ersetzt werden, was Zeit und Platz spart.

 

 

Die Summe () in fun.sh ist eine benutzerdefinierte Funktion, die in einem Shell-Skript verwendet werden sollte

Funktion Funktionsname () {

Befehl

}}

Definieren Sie Funktionen in diesem Format.

Der Ausführungsprozess des vorherigen Skripts ist wie folgt:

 

 

Eine Sache, an die ich Sie erinnern möchte, ist, dass in Shell-Skripten Funktionen oben geschrieben werden müssen, nicht in der Mitte oder am Ende, da die Funktion aufgerufen werden soll. Wenn sie aufgerufen wird, bevor sie angezeigt wird, wird sie definitiv funktionieren ein Fehler.

Shell-Skripte werden im Allgemeinen so häufig eingeführt. Die vom Autor angegebenen Beispiele sind die grundlegendsten. Selbst wenn Sie alle Beispiele vollständig verstehen, bedeutet dies nicht, wie gut Ihre Shell-Skriptfähigkeiten sind. In den verbleibenden Tagen sollten Sie also so viel wie möglich üben und mehr Skripte schreiben. Je mehr Skripte Sie schreiben, desto stärker werden Ihre Fähigkeiten sein. Ich hoffe, Sie finden ein Buch, das sich mit Shell-Skripten befasst, um es eingehend zu studieren. Dann wird der Autor Ihnen ein paar Übungsfragen für Shell-Skripte hinterlassen, Sie sollten besser nicht faul sein.

1. Schreiben Sie ein Shell-Skript, um die Summe von 1-100 zu berechnen.

2. Schreiben Sie ein Shell-Skript, bei dem Sie eine Zahl eingeben müssen, und berechnen Sie dann die Summe von 1 zu der von Ihnen eingegebenen Zahl. Wenn die von Ihnen eingegebene Zahl kleiner als 1 ist, müssen Sie sie erneut eingeben, bis Sie die richtige Zahl eingeben ;;

3. Schreiben Sie ein Shell-Skript, um alle Verzeichnisse (nur eine Ebene) unter dem Verzeichnis / root / in das Verzeichnis / tmp / zu kopieren.

4. Schreiben Sie ein Shell-Skript, um die Benutzer user_00, user_01,…, user_100 in Stapeln zu erstellen, und alle Benutzer gehören zur Benutzergruppe.

5. Schreiben Sie ein Shell-Skript, um die erste Spalte der Zeile mit dem Schlüsselwort 'abc' in der Datei test.log abzufangen (vorausgesetzt, das Trennzeichen ist ":"), und sortieren Sie dann die abgefangenen Zahlen (vorausgesetzt, die erste Spalte ist eine Zahl ), Drucken Sie dann die Spalten aus, die mehr als 10 Mal wiederholt werden.

6. Schreiben Sie ein Shell-Skript, um festzustellen, ob die eingegebene IP korrekt ist (die IP-Regel lautet n1.n2.n3.n4, wobei 1 <n1 <255, 0 <n2 <255, = "" 0 <n3 <255, = "" 0 <n4 <255 <= "" span = "">).

Das Folgende sind die Antworten auf die Übungsfragen:

1. #! / bin / bash

Summe = 0

für i in `seq 1 100`; machen

sum = $ [$ i + $ sum]

erledigt

echo $ sum

2. #! / bin / bash

n = 0

während [$ n -lt "1"]; machen

read -p "Bitte geben Sie eine Zahl ein, die größer als" 1 "sein muss:" n

erledigt

Summe = 0

für i in `seq 1 $ n`; machen

sum = $ [$ i + $ sum]

erledigt

echo $ sum

3. #! / bin / bash

für f in `ls / root /`; machen

if [-d $ f]; dann

cp -r $ f / tmp /

Sein

erledigt

4. #! / bin / bash

groupadd Benutzer

für i in `seq 0 9`; machen

useradd -g Benutzer user_0 $ i

erledigt

für j in "seq 10 100"; machen

useradd -g Benutzer user_ $ j

erledigt

5. #! / bin / bash

awk -F ':' '$ 0 ~ / abc / {print $ 1}' test.log> /tmp/n.txt

sort -n n.txt | uniq -c | sort -n> /tmp/n2.txt

awk '$ 1> 10 {print $ 2}' /tmp/n2.txt

6. #! / bin / bash

checkip () {

wenn echo $ 1 | egrep -q '^ [0-9] {1,3} \. [0-9] {1,3} \. [0-9] {1,3} \. [0-9] {1,3} $ '; dann

a = `echo $ 1 | awk -F. '{print $ 1}' `

b = `echo $ 1 | awk -F. '{print $ 2}' `

c = `echo $ 1 | awk -F. '{print $ 3}' `

d = `echo $ 1 | awk -F. '{print $ 4}' `

für n in $ a $ b $ c $ d; machen

if [$ n -ge 255] || [$ n -le 0]; dann

echo "Die Nummer der IP sollte kleiner als 255 und größer als 0 sein."

Rückgabe 2

Sein

erledigt

sonst

echo "Die von Ihnen eingegebene IP stimmt nicht, das Format lautet 192.168.100.1"

Rückgabe 1

Sein

}}

rs = 1

während [$ rs -gt 0]; machen

read -p "Bitte geben Sie die IP ein:" ip

checkip $ ip

rs = `echo $?`

erledigt

echo "Die IP ist richtig!"

Ich denke du magst

Origin blog.csdn.net/h610443955/article/details/114536362
Empfohlen
Rangfolge