Funktionen und Schreiben in Shell -Skripten - Teil VI
- 4960
- 1138
- Henry Liebold
Funktionen spielen eine wichtige Rolle in jeder Programmiersprache. Wie viele echte Programmiersprachen hat Bash Funktionen, die mit begrenzter Implementierung verwendet werden.
Verständnis von Linux -Shell -SkriptfunktionenWas sind Funktionen??
In der Programmierung werden Funktionen als Abschnitte eines Programms bezeichnet, das eine bestimmte Aufgabe ausführt. In diesem Sinne ist eine Funktion eine Art von Verfahren oder Routine. Wenn eine Funktion bezeichnet wird, verlässt das Programm den aktuellen Codeabschnitt und beginnt, die erste Zeile innerhalb der Funktion auszuführen. Wenn es sich wiederholt oder wenn sich eine Aufgabe wiederholt, sollten Sie stattdessen eine Funktion verwenden.
Betrachten Sie beispielsweise den Fall, in dem wir das Faktor für eine Zahl in mehreren Phasen eines bestimmten Programms finden müssen. Anstatt den gesamten Code (zur Berechnung des Faktororials) jedes Mal zu schreiben, können wir diesen Teil des Codes schreiben, der das Faktor in einem Block einmal berechnet und bei mehreren Fällen dasselbe wiederverwendet.
Warum schreiben wir Funktionen??
- Es hilft uns, den Code wiederzuverwenden.
- Verbessern Sie die Lesbarkeit des Programms.
- Effiziente Verwendung von Variablen innerhalb des Programms.
- Ermöglicht es uns, den Programmteil nach Teil zu testen.
- Zeigt das Programm als eine Reihe von Unterschritten an.
Funktionen in Shell -Skripten
Die allgemeine Syntax zum Schreiben von Funktionen in Shell -Skript enthält die folgenden Möglichkeiten.
Funktion func_name … Befehle… oder func_name () …… kann auch in der zweiten Zeile das Öffnen von lockigen Klammern verwendet werden. func_name () … Befehle…
Sie können immer frei gültige Befehle in diese Funktionsblöcke schreiben, wie wir es normalerweise in Shell -Skripten tun. Versuchen wir nun, ein einfaches Skript mit einer kleinen Funktion darin zu schreiben.
#!/bin/bash call_echo () echo 'Dies ist in der Funktion' op = $ 1 if [$# -ne 1]; dann echo "nutzung: $ 0" else wenn [$ 1 = 0]; dann echo 'das ist externen function' elif [$ 1 = 1]; dann rufe_echo sonst wiederholt 'ungültiges Argument' fi fi beenden 0
Die Funktionsdefinition muss dem ersten Aufruf darauf vorangehen. Es gibt nichts Schöneres als "die Funktion zu deklarieren", bevor Sie sie aufrufen. Und wir können immer Funktionen in Funktionen nisten.
Notiz:- Das Schreiben leerer Funktionen führt immer zu Syntaxfehlern.
Wenn die gleiche Funktion mehrfach definiert wird, ist die endgültige Version das, was aufgerufen wird. Nehmen wir ein Beispiel.
#!/bin/bash func_Same () echo 'Erstdefinition' func_Same () echo 'zweite Definition' Func_Same Exit 0
Funktionen, die Parameter und zurückgegebene Werte übernehmen
Gehen wir tiefer, indem wir über die Funktionen berücksichtigen, Parameter zu nehmen und Werte zurückzugeben. Um einen Wert aus einer Funktion zurückzugeben. Syntax ist wie folgt.
func_name () … Befehle… $ ret_val zurückgeben
In ähnlicher Weise können wir Argumente an die Funktionen übergeben, die mit Räumen getrennt sind, wie unten angegeben.
func_name $ arg_1 $ arg_2 $ arg_3
In der Funktion können wir auf die Argumente zugreifen, um 1, $ 2, $ 3 usw. usw. Sehen Sie sich das folgende Beispielskript an, um die maximal zwei Ganzzahlen mit Funktion zu finden, um mehr Klarheit hinzuzufügen.
#!/bin/bash usg_err = 7 max_two () if ["$ 1" -Eq "$ 2"]; dann echo 'Equal' exit 0 elif ["$ 1" -Gt "$ 2"]; dann echo $ 1 sonst echo $ 2 fi err_str () echo "nutzung: $ 0" beenden $ usg_err num_1 = $ 1 num_2 = $ 2 x if [$# -ne 2]; dann err_str teelif ['expr $ num_1:' [0-9]*"-eq $ #num_1]; ; dann max_two $ num_1 $ num_2 sonst err_str fi else er_str fi exit 0
Das obige sieht aus wie ein bisschen komplex, aber es ist einfach, wenn wir die Zeilen durchlesen. Zuerst verschachtelt if-else wenn Linien für Validierungszwecke i.e., Um die Nummer und die Art von Argumenten mit Hilfe regulärer Ausdrücke zu überprüfen. Danach rufen wir die Funktion mit zwei Befehlszeilenargumenten auf und zeigen das Ergebnis dort selbst an. Dies liegt daran, dass wir keine großen Zahlen aus einer Funktion zurückgeben können. Eine andere Möglichkeit, dieses Problem zu umgehen, besteht darin, globale Variablen zu verwenden, um das Ergebnis innerhalb der Funktion zu speichern. Das folgende Skript erklärt diese Methode.
#!/bin/bash usg_err = 7 ret_val = max_two () if ["$ 1" -Eq "$ 2"]; dann echo 'Equal' exit 0 elif ["$ 1" -Gt "$ 2"]; dann ret_val = $ 1 else ret_val = $ 2 fi err_str () echo "Verwendung: $ 0" Beenden Sie $ USG_ERR num_1 = $ 1 num_2 = $ 2 if [$# -ne 2]; dann err_str teelif ['expr $ num_1:' [0-9]*"-eq $ #num_1]; ; dann max_two $ num_1 $ num_2 echo $ ret_val else err_str fi elend er_str fi exit 0
Probieren Sie nun einige aufregende Probleme aus, die in der vorherigen Shell Scripting -Serie mit Funktionen wie folgt erklärt wurden.
- Grundlegend
- 5 Shell -Skripte für Linux -Neulinge zum Erlernen von Shell -Programmierungen - Teil II
- Segeln durch die Welt des Linux Bash Scripting - Teil III
- Mathematischer Aspekt der Linux -Shell -Programmierung - Teil IV
- Berechnung mathematischer Ausdrücke in der Shell -Skriptsprache - Teil V
Ich werde mit weiteren Einsichten in funktionale Funktionen wie lokale Variablen, Rekursion usw. im nächsten Teil zurückkommen. Bleiben Sie mit Kommentaren aktualisiert.
- « Zenity - Erstellt grafische (GTK+) Dialogfelder in Befehlszeilen- und Shell -Skripten
- Multitail - Überwachen Sie mehrere Dateien gleichzeitig in einem einzelnen Linux -Terminal »