Funktion ist ein wiederverwendbarer Codeblock. Oft fügen wir wiederholten Code in eine Funktion ein und rufen diese Funktion von verschiedenen Stellen aus auf. Bibliothek ist eine Sammlung von Funktionen. Wir können häufig verwendete Funktionen in einer Bibliothek definieren und andere Skripte können sie verwenden, ohne Code zu duplizieren.
In diesem Artikel werden wir mehr über Funktionen und Rezepte diskutieren. Zu Demonstrationszwecken verwende ich Bourne Again SHell (Bash) auf einem Ubuntu-Rechner.
Aufruffunktion
In der Shell ist das Aufrufen der Funktion genau dasselbe wie das Aufrufen eines anderen Befehls. Wenn Ihr Funktionsname beispielsweise my_func ist, kann er wie folgt ausgeführt werden:
$ my_func
Wenn eine Funktion Argumente akzeptiert, können diese wie folgt von der Befehlszeile bereitgestellt werden:
$ my_func arg1 arg2 arg3
Funktion definieren
Wir können die folgende Syntax verwenden, um die Funktion zu definieren:
function function_name { Body of function }
Der Funktionskörper kann jeden gültigen Befehl, Schleifenbeschränkung, andere Funktion oder Skript enthalten. Lassen Sie uns nun eine einfache Funktion erstellen, die eine Nachricht auf dem Bildschirm anzeigt.
function print_msg { echo "Hello, World" }
Lassen Sie uns nun diese Funktion ausführen:
$ print_msg Hello, World
Wie erwartet zeigt diese Funktion eine Nachricht auf dem Bildschirm an.
Im obigen Beispiel haben wir die Funktion direkt auf dem Terminal erstellt. Wir können diese Funktion auch in einer Datei speichern. Das folgende Beispiel demonstriert dies.
#! /bin/bash function print_msg { echo "Hello, World" } print_msg
Wir haben diese Funktion in function.sh definiert Datei. Lassen Sie uns nun dieses Skript ausführen:
$ chmod +x function.sh $ ./function.sh Hello, World
Wie Sie sehen, ist die obige Ausgabe genau identisch mit der vorherigen.
Mehr über Funktionen
Im vorherigen Abschnitt haben wir sehr grundlegende Funktionen definiert. Während der Softwareentwicklung benötigen wir jedoch fortgeschrittenere Funktionen, die verschiedene Parameter akzeptieren und Werte zurückgeben können. In diesem Abschnitt werden wir solche Funktionen besprechen.
Argumente an Funktion übergeben
Wir können Argumente bereitstellen, um wie andere Befehle zu funktionieren. Wir können auf diese Argumente von der Funktion aus mit dem Dollar-Symbol ($) zugreifen. Beispielsweise steht $1 für das erste Argument, $2 für das zweite Argument und so weiter.
Lassen Sie uns die obige Funktion ändern, um die Nachricht als Argument zu akzeptieren. Unsere modifizierte Funktion sieht so aus:
function print_msg { echo "Hello $1" }
In der obigen Funktion greifen wir mit $1 auf das erste Argument zu. Lassen Sie uns diese Funktion ausführen:
$ print_msg "LinuxTechi"
Wenn Sie diese Funktion ausführen, wird die folgende Ausgabe generiert:
Hello LinuxTechi
Rückgabewert von Funktion
Wie andere Programmiersprachen bietet Bash eine Rückgabeanweisung, mit der wir dem Aufrufer einen Wert zurückgeben können. Lassen Sie uns dies anhand eines Beispiels verstehen:
function func_return_value { return 10 }
Die obige Funktion gibt den Wert 10 an ihren Aufrufer zurück. Lassen Sie uns diese Funktion ausführen:
$ func_return_value $ echo "Value returned by function is: $?"
Wenn Sie die obige Funktion ausführen, wird die folgende Ausgabe generiert:
Value returned by function is: 10
HINWEIS: In bash müssen wir $? um den Rückgabewert der Funktion zu erfassen
Funktionsrezepte
Bisher haben wir eine ziemlich gute Vorstellung von Bash-Funktionen bekommen. Lassen Sie uns nun einige nützliche Bash-Funktionen erstellen, die uns das Leben erleichtern können.
Logger
Lassen Sie uns eine Logger-Funktion erstellen, die Datum und Uhrzeit zusammen mit der Log-Nachricht druckt.
function log_msg { echo "[`date '+ %F %T'` ]: [email protected]" }
Lassen Sie uns diese Funktion ausführen:
$ log_msg "This is sample log message"
Wenn Sie diese Funktion ausführen, wird die folgende Ausgabe generiert:
[ 2018-08-16 19:56:34 ]: This is sample log message
Systeminformationen anzeigen
Lassen Sie uns eine Funktion erstellen, um Informationen über das GNU/Linux-System anzuzeigen
function system_info { echo "### OS information ###" lsb_release -a echo echo "### Processor information ###" processor=`grep -wc "processor" /proc/cpuinfo` model=`grep -w "model name" /proc/cpuinfo | awk -F: '{print $2}'` echo "Processor = $processor" echo "Model = $model" echo echo "### Memory information ###" total=`grep -w "MemTotal" /proc/meminfo | awk '{print $2}'` free=`grep -w "MemFree" /proc/meminfo | awk '{print $2}'` echo "Total memory: $total kB" echo "Free memory : $free kB" }
Wenn Sie die obige Funktion ausführen, wird die folgende Ausgabe generiert:
### OS information ### No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 18.04.1 LTS Release: 18.04 Codename: bionic ### Processor information ### Processor = 1 Model = Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz ### Memory information ### Total memory: 4015648 kB Free memory : 2915428 kB
Datei oder Verzeichnis im aktuellen Verzeichnis suchen
Die folgende Funktion durchsucht Dateien oder Verzeichnisse im aktuellen Verzeichnis:
function search { find . -name $1 }
Lassen Sie uns das Verzeichnis dir4 mit dem folgenden Befehl durchsuchen:
$ search dir4
Wenn Sie den obigen Befehl ausführen, wird die folgende Ausgabe generiert:
./dir1/dir2/dir3/dir4
Digitaluhr
Die folgende Funktion erstellt eine einfache Digitaluhr auf dem Terminal
function digital_clock { clear while [ 1 ] do date +'%T' sleep 1 clear done }
Bibliothek erstellen
Bibliothek ist eine Sammlung von Funktionen. Um eine Bibliothek zu erstellen – definieren Sie Funktionen in einer Datei und importieren Sie diese Datei in die aktuelle Umgebung.
Nehmen wir an, wir haben alle Funktionen in der Datei utils.sh definiert und verwenden dann den folgenden Befehl, um Funktionen in die aktuelle Umgebung zu importieren:
$ source utils.sh
Danach können Sie jede Funktion aus der Bibliothek wie jeden anderen Bash-Befehl ausführen.
Schlussfolgerung
In diesem Artikel haben wir einige nützliche Rezepte besprochen, die Ihre Produktivität verbessern werden. Ich hoffe, dieser Artikel inspiriert Sie dazu, Ihre eigenen Rezepte zu kreieren.