GNU/Linux >> Tutoriels Linux >  >> Linux

Tutoriel sur les fonctions Bash Shell avec 6 exemples pratiques

Les fonctions du shell bash sont un moyen de regrouper plusieurs commandes UNIX/Linux pour une exécution ultérieure en utilisant un seul nom pour le groupe . La fonction shell Bash peut être exécutée comme une commande Unix normale. Les fonctions shell sont exécutées dans le contexte shell actuel sans créer de nouveau processus pour les interpréter.

Les alias et les fonctions bash vous permettent de définir des raccourcis pour des commandes plus longues ou plus compliquées. Cependant, les alias n'autorisent pas les flux de contrôle, les arguments et les autres trucs trompeurs que ces fonctions autoriseront, comme expliqué dans ce didacticiel.

Cet article fait partie de la série de tutoriels bash en cours. Reportez-vous à notre didacticiel précédent sur l'introduction de bash, l'état d'existence de bash et les exemples d'alias bash.

Syntaxe pour créer une fonction bash :

function functionname()
{
commands
.
.
}
  • fonction est un mot-clé facultatif.
  • nom de la fonction est le nom de la fonction
  • commandes – Liste des commandes à exécuter dans les fonctions.

La fonction accepte des arguments. Lors de l'exécution, les arguments de la fonction deviennent les paramètres positionnels. Le paramètre positionnel 0 aura le nom du script qui reste inchangé.

Vous pouvez appeler la fonction bash à partir de la ligne de commande comme indiqué ci-dessous :

$ functionname arg1 arg2
  • Lorsque le shell interprète une commande Linux, il examine d'abord les fonctions intégrées spéciales telles que break, continue, eval, exec, etc., puis il recherche les fonctions du shell.
  • Le statut de sortie de la fonction bash est le statut de sortie de la dernière commande exécutée dans le corps de la fonction.

Remarque : Placez les définitions des fonctions du shell dans un fichier de démarrage du shell (par exemple, .bash_profile ). De cette façon, la fonction shell est toujours disponible pour vous depuis la ligne de commande. Reportez-vous à notre article précédent sur la séquence d'exécution de bash pour savoir quand .bash_profile sera exécuté.

Exemple 1 :Fonction pour afficher une longue liste de fichiers avec l'extension donnée

La fonction "lsext" est utilisée pour trouver la liste des fichiers dans le répertoire courant, qui a l'extension donnée comme indiqué ci-dessous. Cette fonction utilise la combinaison de la commande find et de la commande ls pour faire le travail.

$ 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

Exemple 2. Fonction Bash pour exécuter une commande Linux donnée sur un groupe de fichiers

Dans l'exemple suivant, la fonction "batchexec" trouve les fichiers avec l'extension donnée et exécute la commande donnée sur ces fichiers sélectionnés.

$ 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

Dans l'exemple ci-dessus, il trouve tous les fichiers de script shell avec l'extension .sh et change son autorisation en 755. (Toutes les autorisations pour l'utilisateur, pour le groupe et les autres autorisations de lecture et d'exécution). Dans la définition de la fonction, vous pouvez remarquer "${@:2}" qui donne le deuxième paramètre de position et les suivants (fonctionnalité d'expansion du shell).

Exemple 3. Fonction Bash pour générer un mot de passe aléatoire

La fonction suivante est utilisée pour générer des mots de passe forts aléatoires avec un caractère spécial pour la longueur donnée. Si la longueur n'est pas donnée par défaut, il génère une longueur de 12 caractères.

$ function rpass() {
        cat /dev/urandom | tr -cd '[:graph:]' | head -c ${1:-12}
}

$ rpass 6
-Ju.T[[

$ rpass
Gz1f!aKN^""k

Dans l'exemple ci-dessus, lorsque rpass est exécuté avec l'argument 6, il génère un mot de passe aléatoire avec 6 caractères et rpass sans argument génère un mot de passe de 12 caractères. ${1:-12} signifie que si $1 n'est pas défini ou que null 12 sera renvoyé, sinon la valeur de $1 sera remplacée.

Exemple 4. Fonction Bash pour obtenir l'adresse IP d'une interface donnée

L'exemple suivant définit une fonction appelée 'getip' qui accepte le nom de l'interface comme argument et donne l'adresse IP attribuée à l'interface donnée de la machine. (par défaut, il renvoie l'adresse IP eth0). Cela utilise la commande ifconfig pour obtenir l'adresse IP.

$ 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

Exemple 5. Fonction bash pour imprimer les détails de la machine

Cet exemple définit la fonction qui donne toutes les informations nécessaires sur la machine. Les utilisateurs peuvent définir et appeler cette fonction dans les fichiers de démarrage, afin que vous obteniez ces informations au démarrage.

$ 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

Exemple 6 :Fonction Bash pour mieux formater la sortie ls

La fonction suivante effacera l'écran, placera le curseur en haut de l'écran, exécutera ls, puis placera le curseur à la fin de l'écran.

$ function ll ()
{
    clear;
    tput cup 0 0;
    ls --color=auto -F --color=always -lhFrt;
    tput cup 40 0;
}

$ ll

Afficher le code de la fonction à l'aide de la commande de type

type est un shell intégré utilisé pour afficher le code de la fonction.

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"
}

Pour vous y référer facilement, obtenez les 6 fonctions mentionnées dans cet article à partir de cet exemple de fichier de fonctions .bash_profile.

Ajoutez toutes ces fonctions à votre fichier ~/.bash_profile, pour vous assurer d'avoir accès à ces fonctions à tout moment sans avoir à le créer à chaque fois.


Linux
  1. Fonctions dans les variables shell ?

  2. Instruction Bash If-Else avec des exemples

  3. Le tutoriel Ultimate Bash Array avec 15 exemples

  4. Tutoriel de référence et de déréférencement des tableaux Perl avec des exemples pratiques

  5. 15 commandes intégrées utiles de Bash Shell (avec exemples)

Bash Scripting - Fonctions expliquées avec des exemples

Syntaxe Bash If Else avec exemples

Tutoriel Unix Sed :Opération de fichiers multilignes avec 6 exemples pratiques

Tutoriel d'introduction aux scripts Bash avec 5 exemples pratiques

Tutoriel sur les variables Bash - 6 exemples pratiques de variables globales et locales Bash

Le didacticiel Ultimate Tar Command avec 10 exemples pratiques