Découvrir l'écriture de scripts en Bash

Comprendre les tests en Bash

TESTEZ LINKEDIN LEARNING GRATUITEMENT ET SANS ENGAGEMENT

Tester maintenant Afficher tous les abonnements
Le Bash ne comprend pas de statut de sortie. Il est important de bien comprendre ce concept pour écrire correctement des tests dans les structures de contrôle.
07:25

Transcription

Avant d’aborder les structures de contrôle à proprement parler, comme le if par exemple, chose très traditionnelle dans les langages de programmation, il faut qu’on parle d’une spécificité du bash. C’est que les tests, parce que quand on fait des if, on fait des tests, vrai ou faux, des choses qui sont booléennes, qui retournent vrai ou faux, eh bien dans le bash, on va tester plutôt des valeurs de retour. En fait, c’est des scripts, et c’est à la base, basé sur la forme de la ligne de commande. On tape une commande, et puis la commande nous retourne une valeur de retour. C'est ce qu’on appelle un exit status. Cette valeur de retour, elle est récupérée dans une variable spéciale, qui s’appelle $?, qui nous dit quelle est la valeur de retour. Si d’ailleurs j’exécute ceci, et il faudrait peut-être que je fasse un écho simplement, pour que ça ressemble à quelque chose, voilà, eh bien, la valeur de retour est 0. Ça veut dire, 0, qu’il n’y a pas de problème. C’est une valeur de retour, on va dire, par défaut qui indique que tout s’est bien passé. Et donc par rapport à ces tests qu’on va faire, 0, ça va être une valeur de retour correcte. Et donc par rapport au test qu’on va faire, 0 va être la valeur de retour correcte. Et donc ça voudra dire vrai, ce qui est à l’inverse de beaucoup de langages de programmation, où 1 signifie en général vrai, et 0 faux, ce qui est conventionnel si vous voulez. Dans notre cas, 0 va être conventionnellement vrai, et va être évalué par les structures de test à vrai. Et tout ce qui n’est pas 0, en l’occurrence 1, va être évalué comme faux. Je vous fais une petite démonstration. On va faire quelque chose qui va retourner, là en l’occurrence une erreur, par exemple. Parce que l’erreur est quelque chose qui va générer une valeur de retour différente de 0. On va faire une évaluation arithmétique, on va faire quelque chose de simple. Générer une erreur, c’est pas compliqué. On va se générer une division par 0. Donc on a une ligne d’instructions ici. Chaque ligne d’instructions a généré une valeur de retour, et on va tester juste en-dessous quel est le $? de l'instruction qui vient juste de s’exécuter. Et ça nous retourne ici, division par 0, vous voyez que la valeur de retour est 1. Donc c’est considéré comme faux. Ici c’est en même temps un signe d’erreur. Mais c’est pas vraiment la même chose. On ne parle pas de code d’erreur. Ici on parle vraiment de valeur de retour. Et cette valeur de retour ici, si vous testez $?, il n’est valable que pour l’instruction précédente. Si j’insère quelque chose ici, je fais par exemple, machin=truc, ça veut dire que je crée une variable et j’affecte truc. On va peut-être faire quelque chose de même un peu plus propre, on va bien spécifier, même si c’est pas indispensable que c’est une chaîne de caractère. OK, on fait un petit Make. Et donc j’ai bien ici ma division par 0. En dessous je n’ai pas de retour sur l’affectation de ma variable, mais voici le retour du $? qui me dit 0 parce que l’instruction juste supérieure ici s’est exécutée avec succès. La valeur de retour finalement de cette affectation, c’est OK, 0. Et donc dans le bash on va avoir une syntaxe de test, si vous voulez, qui va retourner une valeur de retour, soit 0 si c’est vrai, soit 1 si c’est faux. Mais dans le if, on n’aura pas besoin vraiment de dire est égal à 1 ou est égal à 0. Le if va comprendre cette valeur de retour. On va faire un test simple. Maintenant qu’on a créé une variable, on va regarder ce qu’il y a dans la variable. Donc par exemple, on pourrait dire : variable machin est égal à truc. Vous avez vu l’égal. Ici, pour faire l’affectation, je fais un égal sans espace. Par contre, un égal ici, avec des espaces à gauche et à droite, ça va être un égal de comparaison, et non pas d’affectation. En d’autres termes, l’opérateur n’a pas le même sens. Ici l’opérateur avec les espaces signifie bien que je vais faire une comparaison. Si je fais une comparaison, il faut que je l’ajoute dans un test. Et pour ça, j’ai deux syntaxes particulières : soit la commande interne test qui me retourne une valeur de retour, on va voir. Je vais prendre ça et je le colle en-dessous. Et donc test va générer une valeur de retour, si machin est égal à truc, test va générer 0, si machin est différent de truc, eh bien il va générer 1. Bon, ça vous avez compris. Donc j’ai ici 0. Et si j’essaie ceci, eh bien j’ai 1. Bon, simple à comprendre. Au passage, est-ce que je peux faire directement un écho de test machin est égal à truc ? Bon, je fais vite pour que vous voyiez déjà le résultat. Test truc est égal à truct, vous voyez. Alors, qu’est-ce qui s’est passé ? C’est assez évident. J'ai fait un écho. Tout ce qui suit l’écho est une chaîne de caractères. Donc il a écrit test, il a remplacé machin par sa valeur de variable. Donc truc est égal à truct. En fait, il a transformé tout ça en une chaîne de caractères. Non, ce que je veux, c’est une évaluation de ce test. Vous avez une syntaxe particulière dans le bash, qui consiste à encadrer une commande par des accents. Je ne sais pas comment on appelle ce petit signe d’ailleurs, qui est l’apostrophe penchée. Mais vous le trouvez sur la touche 7 de votre clavier Azerty, si vous êtes en Azerty. Et donc ça veut dire AltGr-7, comme ceci. Attendez, voilà donc AltGr-7. Vous voyez, et AltGr-7 également à la fin, avec un petit coup de barre d’espacement pour le générer. Donc ça, ça veut dire dans le bash qu’il faut considérer ce qu’il y a à l’intérieur comme une commande à exécuter. Donc le bash va d’abord exécuter la commande, retourner son résultat, et ensuite faire l’écho avec ça. Et donc ici en fait, voyez qu’il n'y a rien. Il n’y a pas de valeur vraiment. Ça ne génère rien de particulier, ce test. Ça ne génère pas un retour. Ça génère une valeur de retour, un exit status qui n’est pas affiché en tant que tel, mais qui va être traité soit par une structure de contrôle, soit stocké dans $?. Donc, comment est-ce que je peux faire ce test ? Je vais reprendre ça. Bien entendu, j’ai cette syntaxe que je peux utiliser telle quelle, dans un if par exemple. Il y a une autre syntaxe qui consiste à encadrer avec des crochets, comme ceci. Et alors, attention, encore des problèmes d’espace. Ces crochets doivent être espacés avec le contenu par un espace après le crochet ouvrant, et un espace avant le crochet fermant. Sinon ça ne fonctionne pas. Donc vous voyez vraiment, vous avez une syntaxe ici, de test. C’est crochet ouvrant, espace, ensuite bla bla bla, espace égal espace, bla bla bla, et ensuite espace avant le crochet fermant. Et ces deux syntaxes, ces deux lignes, le test ou les crochets, sont équivalentes.

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 !