Le 14 septembre 2017, nous avons publié une version actualisée de notre Politique de confidentialité. En utilisant video2brain.com vous vous engagez à respecter ces documents mis à jour. Veuillez donc prendre quelques minutes pour les consulter.

Découvrir l'écriture de scripts en Bash

Créer des fonctions

TESTEZ LINKEDIN LEARNING GRATUITEMENT ET SANS ENGAGEMENT

Tester maintenant Afficher tous les abonnements
Vous pouvez déclarer des fonctions dans le corps du script Bash, de façon à réutiliser des parties de code dans tout votre script.
05:37

Transcription

Avec le bash, on peut également comme dans tout langage de programmation, faire des fonctions. Vous allez me dire : c'est quand même le minimum syndical. On peut faire des fonctions, elles ont une légère différence avec les fonctions traditionnelles des autres langages de programmation. Elles sont un peu moins souples parce que les fonctions ne vont retourner que des statuts de retour, des exit status. On commence à les connaître ceux-là. Ça veut dire que si je crée une fonction, ici je suis dans un fichier de script vide ma fonction, je vais l'appeler par exemple getCepages, et mon idée c'est : j'ai besoin d'aller chercher dans le fichier de cepages un certain nombre de fois. Donc je vais me faire une fonction générique pour ça. Alors première chose : je déclare ma fonction avec des parenthèses. Je fais en dessous un début de bloc, bloc avec des accolades ouvrantes et fermantes, comme ça. Donc ici, c'est la fin de mon bloc à la manière des langages dérivés du C. Et le bash comprend donc que je définis une fonction. Vous voyez que la coloration syntaxique de vi a changé. Donc, à l'intérieur de cette fonction, j'ai un mot clé qui s'appelle return. Mais return, je ne peux pas lui retourner des chaînes de caractère. Je ne peux pas lui dire coucou, il va m'envoyer balader. Je vous fais un exemple d'appel : maintenant je vais simplement appeler getCepages plus loin dans mon code. Je n'ai pas besoin de mettre de parenthèses ici, je n'ai pas de paramètres en plus. C'est une fonction niladique, elle n'a pas de paramètres. Je n'ai pas besoin de l'appeler avec des parenthèses ici, et on va essayer d'exécuter et il me dit : attention, return coucou argument numérique nécessaire, il te faut un argument numérique. Bon, ça veut dire que je ne peux faire un return que dans nombre, donc une valeur de retour 0 si ça s'est bien passé, et puisque je veux : 1 si ça s'est mal passé. Donc ça ne va pas m'aider à retourner la liste des cépages. Alors comment fait-on pour lever cette problématique ? Eh bien, on travaille avec la sortie standard, le standard output, c'est-à-dire qu'on va faire un echo, et puis on va récupérer la valeur de l'echo, comme on le fait pour d'autres commandes dans le bash. Donc ce n'est pas parfait d'un point de vue de langage, mais bon, on n'a pas trop le choix, cela dit. Je vais récupérer mes cepages de mon fichier. Donc je me refais un petit while read cepage. Ça va être ma variable, je fais un do, un done. Vous vous souvenez, ici je vais le chercher dans le fichier cepages. Je n'ai pas mis son chemin ici, je pars du principe que le script est dans le même répertoire que le fichier de cepages. Mais je pourrais faire un chemin relatif ou absolu ici si ce n'est pas le cas bien entendu, il faut faire attention à ça. Et puis, eh bien qu'est-ce que je vais mettre dans ma boucle ? Parce que je voudrais alimenter quelque chose qui va récupérer chaque cepages. Eh bien, dans ma boucle, je vais faire une liste, ce ne serait pas mal. Bon, est-ce qu'il faut que je la déclare d'abord ? C'est possible mais ce n'est pas absolument nécessaire. Je pourrais faire une déclaration ici. Par exemple, je vais dire une variable qui s'appelle cep. Je peux la déclarer comme ça, en disant que c'est un tableau. Vous vous souvenez ? Je peux également la déclarer en faisant une initialisation de sa valeur comme ceci, en disant: voilà, c'est un tableau puisqu'il y a des parenthèses mais il n'y a rien dedans. donc c'est un tableau vide, je peux le faire comme ça. Ce n'est pas obligatoire cela dit, parce que il s'en sortira quand même ici lorsque je vais lui dire : rajoute-moi un élément. Comment je vais lui dire : rajoute-moi un élément ? Je n'ai pas d'index, je n'ai pas de valeur d'index. Alors je pourrais faire un for en incrémentant une variable. Mais ici je vais plutôt faire comme ceci : je vais utiliser cette syntaxe un peu à la C, +=, qui va me permettre d'ajouter quelque chose à une variable déjà existante. Je préfère cep=cep + quelque chose éventuellement, mais cette syntaxe est plus courte, elle est assez traditionnelle. Donc cep+= et ensuite cepage. Alors attention, si je fais ça comme ça, je vais concaténer tous mes cépages dans la même variable. Ici, j'ai déclaré que c'était une liste. Mais ici, je ne dis pas que c'est un élément de la liste. Donc je vais concaténer mes valeur au même endroit. Ce n'est pas ce que je veux faire, je vais mettre ici entre parenthèses de façon à dire : j'ajoute un élément à ma liste et avec cette syntaxe cep+=, parenthèses, contenus, j'ajoute dans les faits des éléments à ma liste. Comment est-ce que je référence tout ça ? Eh bien, je vous ai dit, c'est dans l'output standard, c'est dans la sortie standard. Donc je vais faire un echo de mon $cep. Alors pas comme ça puisque ce serait le premier élément de la liste. Donc plutôt comme ça, voilà. Et pas comme ça puisqu'il faut protéger vous vous souvenez. Donc, plutôt comme ça. Donc on a quelque chose, on essaye, déjà de voir si ça marche. On a effectivement merlot, malbec, cabernet, etc. Une précaution : si vous voulez changer l'IFS, l'Internal Field Separator, on va le faire en français à partir de maintenant, le séparateur de champ interne, IFS, eh bien je peux le changer directement ici après le while, avant le read IFS=, et puis je vais mettre ça comme ça pour dire c'est égal à retour chariot, et si je le fais à cet endroit, eh bien, la portée de ce changement est locale à la boucle while. Et ça, c'est très intéressant. Ça veut dire que je vais changer l'IFS juste pour mon read, juste pour ma lecture de fichier, et qu'ensuite, quand on sera sorti de cette boucle while, IFS reprendra sa valeur originale. Donc c'est un changement local, en général on fait comme ça parce que c'est quand même très très pratique. Donc on regarde ce que ça donne. Eh bien ça n'a pas changé par définition. Mais on a déjà un bon début de travail d'appel de fonctions.

Découvrir l'écriture de scripts en Bash

Prenez en main l'écriture de scripts en Bash. Recevez et traitez les paramètres envoyés à vos scripts, manipulez des variables, découvrez les fonctions intégrées du Bash, etc.

1h41 (22 vidéos)
Aucun commentaire n´est disponible actuellement
 
Logiciel :
Spécial abonnés
Date de parution :21 févr. 2017

Votre formation est disponible en ligne avec option de téléchargement. Bonne nouvelle : vous ne devez pas choisir entre les deux. Dès que vous achetez une formation, vous disposez des deux options de consultation !

Le téléchargement vous permet de consulter la formation hors ligne et offre une interface plus conviviale. Si vous travaillez sur différents ordinateurs ou que vous ne voulez pas regarder la formation en une seule fois, connectez-vous sur cette page pour consulter en ligne les vidéos de la formation. Nous vous souhaitons un excellent apprentissage avec cette formation vidéo.

N'hésitez pas à nous contacter si vous avez des questions !