Bash-Shell-Funktionen sind eine Möglichkeit, mehrere UNIX-/Linux-Befehle zur späteren Ausführung unter Verwendung eines einzigen Namens für die Gruppe zu gruppieren . Die Bash-Shell-Funktion kann wie ein normaler Unix-Befehl ausgeführt werden. Shell-Funktionen werden im aktuellen Shell-Kontext ausgeführt, ohne dass ein neuer Prozess zu ihrer Interpretation erstellt wird.
Beide Bash-Aliase und -Funktionen ermöglichen es Ihnen, Abkürzungen für längere oder kompliziertere Befehle zu definieren. Aliase erlauben jedoch keine Kontrollflüsse, Argumente und andere Tricks, die diese Funktionen zulassen, wie in diesem Tutorial erklärt wird.
Dieser Artikel ist Teil der fortlaufenden Bash-Tutorial-Reihe. Sehen Sie sich unser früheres Tutorial über Bash-Einführung, Bash-Existenzstatus und Bash-Alias-Beispiele an.
Syntax zum Erstellen einer Bash-Funktion:
function functionname() { commands . . }
- Funktion ist ein optionales Schlüsselwort.
- Funktionsname ist der Name der Funktion
- Befehle – Liste der auszuführenden Befehle in den Funktionen.
Funktion akzeptiert Argumente. Während der Ausführung werden die Argumente der Funktion zu Positionsparametern. Der Positionsparameter 0 hat den Skriptnamen, der unverändert bleibt.
Sie können die Bash-Funktion wie unten gezeigt von der Befehlszeile aus aufrufen:
$ functionname arg1 arg2
- Wenn die Shell einen Linux-Befehl interpretiert, sucht sie zuerst nach den speziellen eingebauten Funktionen wie break, Continue, eval, exec usw., dann sucht sie nach Shell-Funktionen.
- Der Exit-Status der Bash-Funktion ist der Exit-Status des letzten im Funktionsrumpf ausgeführten Befehls.
Hinweis: Platzieren Sie die Shell-Funktionsdefinitionen in einer Shell-Startdatei (z. B. .bash_profile ). Auf diese Weise steht Ihnen die Shell-Funktion immer von der Kommandozeile aus zur Verfügung. Lesen Sie unseren früheren Artikel zur Bash-Ausführungssequenz, um festzustellen, wann .bash_profile ausgeführt wird.
Beispiel 1:Funktion zum Anzeigen einer langen Liste von Dateien mit der angegebenen Erweiterung
Die Funktion „lsext“ wird verwendet, um die Liste der Dateien im aktuellen Verzeichnis zu finden, das die angegebene Erweiterung hat, wie unten gezeigt. Diese Funktion verwendet die Kombination aus find-Befehl und ls-Befehl, um die Arbeit zu erledigen.
$ function lsext() { find . -type f -iname '*.'${1}'' -exec ls -l {} \; ; } $ cd ~ $ lsext txt -rw-r--r-- 1 root root 24 Dec 15 14:00 InMorning.txt -rw-r--r-- 1 root root 184 Dec 16 11:45 Changes16.txt -rw-r--r-- 1 root root 458 Dec 18 11:04 Changes18.txt -rw-r--r-- 1 root root 1821 Feb 4 15:01 ChangesOfDB.txt
Beispiel 2. Bash-Funktion zum Ausführen eines bestimmten Linux-Befehls für eine Gruppe von Dateien
Im folgenden Beispiel findet die Funktion „batchexec“ die Dateien mit der angegebenen Erweiterung und führt den angegebenen Befehl für diese ausgewählten Dateien aus.
$ function batchexec() { find . -type f -iname '*.'${1}'' -exec ${@:2} {} \; ; } $ cd ~ $ batchexec sh ls $ batchexec sh chmod 755 $ ls -l *.sh -rwxr-xr-x 1 root root 144 Mar 9 14:39 debug.sh -rwxr-xr-x 1 root root 5431 Jan 25 11:32 get_opc_vers.sh -rwxr-xr-x 1 root root 22 Mar 18 08:32 t.sh
Im obigen Beispiel findet es alle Shell-Skriptdateien mit der Erweiterung .sh und ändert seine Berechtigung auf 755. (Alle Berechtigungen für Benutzer, für Gruppen und andere Lese- und Ausführungsberechtigungen). In der Funktionsdefinition könnten Sie „${@:2}“ bemerken, das den zweiten und die folgenden Positionsparameter angibt (Shell-Erweiterungsfunktion).
Beispiel 3. Bash-Funktion zum Generieren eines zufälligen Passworts
Die folgende Funktion wird verwendet, um die zufälligen starken Passwörter mit Sonderzeichen für die angegebene Länge zu generieren. Wenn die Länge standardmäßig nicht angegeben ist, wird mit einer Länge von 12 Zeichen generiert.
$ function rpass() { cat /dev/urandom | tr -cd '[:graph:]' | head -c ${1:-12} } $ rpass 6 -Ju.T[[ $ rpass Gz1f!aKN^""k
Wenn im obigen Beispiel rpass mit dem Argument 6 ausgeführt wird, generiert es ein zufälliges Passwort mit 6 Zeichen und rpass ohne Argument generiert ein 12 Zeichen langes Passwort. ${1:-12} bedeutet, wenn $1 nicht gesetzt ist oder null 12 zurückgegeben wird, wird sonst der Wert von $1 ersetzt.
Beispiel 4. Bash-Funktion zum Abrufen der IP-Adresse einer bestimmten Schnittstelle
Das folgende Beispiel definiert eine Funktion namens „getip“, die den Schnittstellennamen als Argument akzeptiert und die der gegebenen Schnittstelle in der Maschine zugewiesene IP-Adresse angibt. (standardmäßig gibt es die IP-Adresse eth0 zurück). Dies verwendet den ifconfig-Befehl, um die IP-Adresse abzurufen.
$ function getip() { /sbin/ifconfig ${1:-eth0} | awk '/inet addr/ {print $2}' | awk -F: '{print $2}'; } $ getip 15.110.106.86 $ getip eth0 15.110.106.86 $ getip lo 127.0.0.1
Beispiel 5. Bash-Funktion zum Drucken der Maschinendetails
Dieses Beispiel definiert die Funktion, die alle erforderlichen Informationen über die Maschine liefert. Benutzer können diese Funktion in den Startdateien definieren und aufrufen, sodass Sie diese Informationen während des Starts erhalten.
$ function mach() { echo -e "\nMachine information:" ; uname -a echo -e "\nUsers logged on:" ; w -h echo -e "\nCurrent date :" ; date echo -e "\nMachine status :" ; uptime echo -e "\nMemory status :" ; free echo -e "\nFilesystem status :"; df -h } $ mach Machine information: Linux dev-db 2.6.18-128.el5 #1 SMP Wed Dec 17 11:41:38 EST 2008 x86_64 GNU/Linux Users logged on: root pts/2 ptal.mot Wed10 0.00s 1.35s 0.01s w -h Current date : Thu Mar 18 11:59:36 CET 2010 Machine status : 11:59:36 up 7 days, 3 min, 1 user, load average: 0.01, 0.15, 0.15 Memory status : total used free shared buffers cached Mem: 2059768 2033212 26556 0 81912 797560 -/+ buffers/cache: 1153740 906028 Swap: 4192956 48164 4144792 Filesystem status : Filesystem Size Used Avail Use% Mounted on /dev/sda1 12G 12G 0 100% / tmpfs 1006M 377M 629M 38% /dev/shm /dev/sdc5 9.9G 409M 9.0G 5% /mydisk
Beispiel 6:Bash-Funktion zur besseren Formatierung der ls-Ausgabe
Die folgende Funktion löscht den Bildschirm, platziert den Cursor am oberen Rand des Bildschirms, führt ls aus und platziert den Cursor dann am Ende des Bildschirms.
$ function ll () { clear; tput cup 0 0; ls --color=auto -F --color=always -lhFrt; tput cup 40 0; } $ ll
Funktionscode mit Typbefehl anzeigen
type ist eine eingebaute Shell, die verwendet wird, um den Funktionscode anzuzeigen.
Syntax: type function-name
$ type ll ll is a function ll () { clear; tput cup 0 0; ls --color=auto -F --color=always -lhFrt; tput cup 40 0; alias ls="ls --color=auto -F" }
Holen Sie sich zu Ihrer einfachen Referenz alle 6 Funktionen, die in diesem Artikel erwähnt werden, aus dieser Beispiel-.bash_profile-Funktionsdatei.
Fügen Sie all diese Funktionen zu Ihrer Datei ~/.bash_profile hinzu, um sicherzustellen, dass Sie jederzeit Zugriff auf diese Funktionen haben, ohne sie jedes Mal neu erstellen zu müssen.