Fonctions de compréhension et d'écriture dans les scripts shell - Partie VI
- 568
- 140
- Noa Faure
Les fonctions jouent un rôle important dans tout langage de programmation. Comme de nombreux langages de programmation réels, Bash a des fonctions qui sont utilisées avec une implémentation limitée.
Comprendre les fonctions de script de shell LinuxQuelles sont les fonctions?
En programmation, les fonctions sont nommées sections d'un programme qui effectue une tâche spécifique. En ce sens, une fonction est un type de procédure ou de routine. Lorsqu'une fonction est appelée le programme quitte la section actuelle du code et commence à exécuter la première ligne à l'intérieur de la fonction. Chaque fois qu'il y a du code répétitif ou lorsqu'une tâche se répète, envisagez d'utiliser une fonction à la place.
Par exemple, considérons le cas où nous devons trouver le factoriel d'un nombre à plusieurs étapes d'un programme particulier. Au lieu d'écrire l'intégralité du code (pour calculer le factoriel) à chaque fois, nous pouvons écrire cette partie du code qui calcule le factoriel une fois à l'intérieur d'un bloc et réutiliser la même chose à plusieurs reprises.
Pourquoi écrivons-nous des fonctions?
- Cela nous aide à réutiliser le code.
- Améliorer la lisibilité du programme.
- Utilisation efficace des variables à l'intérieur du programme.
- Nous permet de tester le programme en partie par partie.
- Affiche le programme comme un tas de sous-étapes.
Fonctions dans les scripts shell
La syntaxe générale pour l'écriture de fonctions dans le script shell comprend les moyens suivants.
fonction func_name … commandes… ou func_name () … commandes… ouverte les accolades bouclées peuvent également être utilisés dans la deuxième ligne. func_name () … commandes…
Vous êtes toujours libre d'écrire des commandes valides à l'intérieur de ces blocs de fonction comme nous le faisons normalement dans les scripts shell. Essayons maintenant d'écrire un script simple avec une petite fonction à l'intérieur.
#!/ bin / bash call_echo () echo 'Ceci est à l'intérieur de la fonction' op = 1 1 si [$ # -ne 1]; puis écho "Utilisation: 0" else si [1 $ = 0]; puis écho 'Ceci est une fonction extérieure' elif [1 $ = 1]; puis call_echo elo echo 'argument non valide' fi fi sort 0
La définition de la fonction doit précéder le premier appel. Il n'y a rien de tel que «déclarer la fonction» avant de l'appeler. Et nous pouvons toujours nicher les fonctions à l'intérieur des fonctions.
Note: - L'écriture des fonctions vides entraîne toujours des erreurs de syntaxe.
Lorsque la même fonction est définie plusieurs fois, la version finale est ce qui est invoqué. Prenons un exemple.
#!/ bin / bash func_same () echo 'première définition' func_same () echo 'deuxième définition' func_same exit 0
Fonctions prenant des paramètres et des valeurs de retour
Allons plus profondément en considérant les fonctions en prenant des paramètres et des valeurs de retour. Pour retourner une valeur à partir d'une fonction, nous utilisons la coque «retour» intégrée. La syntaxe est la suivante.
func_name () … commandes… return $ ret_val
De même, nous pouvons transmettre des arguments aux fonctions séparées avec des espaces comme indiqué ci-dessous.
func_name $ arg_1 $ arg_2 $ arg_3
À l'intérieur de la fonction, nous pouvons accéder aux arguments dans l'ordre à 1 $, 2 $, 3 $ et ainsi. Regardez l'exemple de script suivant pour trouver le maximum de deux entiers en utilisant la fonction pour ajouter plus de clarté.
#!/ bin / bash usg_err = 7 max_two () if ["1 1" -eq "22"]; puis echo 'equal' exit 0 elif ["1 $" -gt "2 $"]; puis écho $ $ 1 else echo $ $ fi err_str () echo "usage: $ 0" exit $ usg_err num_1 = $ 1 num_2 = $ 2 x if [$ # -ne 2]; alors err_str elif ['expr $ num_1:' [0-9] * "- eq $ # num_1]; alors si ['expr $ num_2:' [0-9] *" - eq $ # num_2]] ; alors max_two $ num_1 $ num_2 else err_str fi else err_str fi exit 0
Ce qui précède ressemble un peu complexe, mais c'est simple si nous lisons les lignes. D'abord imbriqué if-else si lignes à des fins de validation i.e., Pour vérifier le nombre et le type d'arguments à l'aide d'expressions régulières. Après cela, nous appelons la fonction avec deux arguments de ligne de commande et affiche le résultat là-bas lui-même. C'est parce que nous ne pouvons pas retourner de grands entiers d'une fonction. Une autre façon de contourner ce problème est d'utiliser des variables globales pour stocker le résultat dans la fonction. Le script ci-dessous explique cette méthode.
#!/ bin / bash usg_err = 7 ret_val = max_two () if ["1" -eq "$ 2"]; puis echo 'equal' exit 0 elif ["1 $" -gt "2 $"]; alors ret_val = $ 1 else ret_val = $ 2 fi err_str () echo "usage: $ 0" exit $ usg_err num_1 = $ 1 num_2 = $ 2 si [$ # -ne 2]; alors err_str elif ['expr $ num_1:' [0-9] * "- eq $ # num_1]; alors si ['expr $ num_2:' [0-9] *" - eq $ # num_2]] ; alors max_two $ num_1 $ num_2 echo $ ret_val else err_str fi else err_str fi sort 0
Essayez maintenant quelques problèmes passionnants qui ont été expliqués dans la série de scripts de shell précédente en utilisant des fonctions comme suit.
- Comprendre les conseils de langage de script de shell Linux de base - Partie I
- 5 SCRIPTS Shell pour les débutants Linux pour apprendre la programmation de Shell - Part II
- Navigation dans le monde des scripts Linux Bash - Partie III
- Aspect mathématique de la programmation de shell Linux - Partie IV
- Calcul des expressions mathématiques dans le langage de script de coquille - Partie V
Je reviendrai avec plus d'informations sur des fonctionnalités fonctionnelles comme l'utilisation de variables locales, la récursivité, etc. dans la partie suivante. Restez à jour avec les commentaires.
- « Zenity - Crée des boîtes de dialogue graphiques (GTK +) dans la ligne de commande et les scripts shell
- Multitail - surveiller plusieurs fichiers simultanément dans un seul terminal Linux »