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

Tutorial zu Bash-Shell-Funktionen mit 6 praktischen Beispielen

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.


Linux
  1. Funktionen in Shell-Variablen?

  2. Bash-Anfängerserie Nr. 9:Verwenden von Funktionen in Bash

  3. Bash-If-Else-Anweisung mit Beispielen

  4. Das ultimative Bash-Array-Tutorial mit 15 Beispielen

  5. Perl-Array-Referenz- und Dereferenzierungs-Tutorial mit praktischen Beispielen

Bash Scripting – Funktionen mit Beispielen erklärt

Bash If Else Syntax mit Beispielen

Unix Sed Tutorial:Mehrzeilige Dateioperation mit 6 praktischen Beispielen

Bash Scripting Einführungstutorial mit 5 praktischen Beispielen

Bash-Variablen-Tutorial – 6 praktische Bash-Beispiele für globale und lokale Variablen

Das ultimative Tar Command Tutorial mit 10 praktischen Beispielen