La fonction est un bloc de code réutilisable. Souvent, nous mettons du code répété dans une fonction et appelons cette fonction à partir de divers endroits. La bibliothèque est une collection de fonctions. Nous pouvons définir des fonctions couramment utilisées dans une bibliothèque et d'autres scripts peuvent les utiliser sans dupliquer le code.
Dans cet article, nous aborderons plus en détail les fonctions et les recettes. À des fins de démonstration, j'utiliserai Bourne Again SHell (Bash) sur la machine Ubuntu.
Fonction d'appel
Dans Shell, l'appel de la fonction est exactement le même que l'appel de toute autre commande. Par exemple, si le nom de votre fonction est my_func, elle peut être exécutée comme suit :
$ my_func
Si une fonction accepte des arguments, ceux-ci peuvent être fournis à partir de la ligne de commande comme suit :
$ my_func arg1 arg2 arg3
Définir la fonction
Nous pouvons utiliser la syntaxe ci-dessous pour définir la fonction :
function function_name { Body of function }
Le corps de la fonction peut contenir n'importe quelle commande valide, contrainte de boucle, autre fonction ou script. Créons maintenant une fonction simple qui affiche un message à l'écran.
function print_msg { echo "Hello, World" }
Exécutons maintenant cette fonction :
$ print_msg Hello, World
Comme prévu, cette fonction affiche un message à l'écran.
Dans l'exemple ci-dessus, nous avons créé une fonction directement sur le terminal. Nous pouvons également stocker cette fonction dans un fichier. L'exemple ci-dessous le démontre.
#! /bin/bash function print_msg { echo "Hello, World" } print_msg
Nous avons défini cette fonction dans function.sh dossier. Exécutons maintenant ce script :
$ chmod +x function.sh $ ./function.sh Hello, World
Si vous observez, la sortie ci-dessus est exactement identique à la précédente.
En savoir plus sur les fonctions
Dans la section précédente, nous avons défini une fonction très basique. Cependant, lors du développement du logiciel, nous avons besoin de fonctions plus avancées qui peuvent accepter divers paramètres et valeurs de retour. Dans cette section, nous aborderons ces fonctions.
Passer des arguments à la fonction
Nous pouvons fournir des arguments pour fonctionner de la même manière que les autres commandes. Nous pouvons accéder à ces arguments à partir de la fonction en utilisant le symbole dollar ($). Par exemple, $1 représente le premier argument, $2 représente le deuxième argument et ainsi de suite.
Modifions la fonction ci-dessus pour accepter le message comme argument. Notre fonction modifiée ressemblera à ceci :
function print_msg { echo "Hello $1" }
Dans la fonction ci-dessus, nous accédons au premier argument en utilisant $1. Exécutons cette fonction :
$ print_msg "LinuxTechi"
Lorsque vous exécutez cette fonction, elle générera la sortie suivante :
Hello LinuxTechi
Renvoyer la valeur de la fonction
Comme d'autres langages de programmation, Bash fournit une instruction de retour à l'aide de laquelle nous pouvons renvoyer la valeur à l'appelant. Comprenons cela avec un exemple :
function func_return_value { return 10 }
La fonction ci-dessus renvoie la valeur 10 à son appelant. Exécutons cette fonction :
$ func_return_value $ echo "Value returned by function is: $?"
Lorsque vous exécutez la fonction ci-dessus, elle générera la sortie suivante :
Value returned by function is: 10
REMARQUE : En bash, nous devons utiliser $ ? pour capturer la valeur de retour de la fonction
Recettes de fonction
Jusqu'à présent, nous avons eu une bonne idée des fonctions bash. Créons maintenant quelques fonctions bash utiles qui peuvent être utilisées pour nous faciliter la vie.
Enregistreur
Créons une fonction d'enregistrement qui imprimera la date et l'heure avec le message du journal.
function log_msg { echo "[`date '+ %F %T'` ]: [email protected]" }
Exécutons cette fonction :
$ log_msg "This is sample log message"
Lorsque vous exécutez cette fonction, elle générera la sortie suivante :
[ 2018-08-16 19:56:34 ]: This is sample log message
Afficher les informations système
Créons une fonction pour afficher des informations sur le système GNU/Linux
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" }
Lorsque vous exécutez la fonction ci-dessus, elle génère la sortie suivante :
### 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
Rechercher un fichier ou un répertoire dans le répertoire actuel
La fonction ci-dessous recherche un fichier ou un répertoire dans le répertoire actuel :
function search { find . -name $1 }
Cherchons dans le répertoire à savoir dir4 en utilisant la commande ci-dessous :
$ search dir4
Lorsque vous exécutez la commande ci-dessus, elle générera la sortie suivante :
./dir1/dir2/dir3/dir4
Horloge numérique
La fonction ci-dessous crée une simple horloge numérique sur le terminal
function digital_clock { clear while [ 1 ] do date +'%T' sleep 1 clear done }
Créer une bibliothèque
La bibliothèque est une collection de fonctions. Pour créer une bibliothèque, définissez des fonctions dans un fichier et importez ce fichier dans l'environnement actuel.
Supposons que nous ayons défini toutes les fonctions dans le fichier utils.sh, puis utilisez la commande ci-dessous pour importer les fonctions dans l'environnement actuel :
$ source utils.sh
Par la suite, vous pouvez exécuter n'importe quelle fonction de la bibliothèque comme n'importe quelle autre commande bash.
Conclusion
Dans cet article, nous avons discuté de quelques recettes utiles qui amélioreront votre productivité. J'espère que cet article vous inspirera pour créer vos propres recettes.