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.