WEBVTT

00:00.000 --> 00:07.880
Salut Ã  tous c'est Florian du site ITConnect,
bienvenue dans cette introduction au scripting

00:07.880 --> 00:12.880
bash sous Linux, puisque effectivement aujourd'hui
je vous propose une vidÃ©o complÃ¨te d'introduction

00:12.880 --> 00:17.639
au scripting bash. Nous allons voir ce que c'est
le bash, nous allons Ã©galement faire nos premiers

00:17.639 --> 00:23.159
pas avec l'exÃ©cution de nos premiÃ¨res commandes
et puis aprÃ¨s on va crÃ©er notre premier script

00:23.159 --> 00:27.559
bash. Je vais vous expliquer un petit peu la
syntaxe globale et quelques notions de base

00:27.680 --> 00:32.759
comme les variables, des choses comme Ã§a, ce qui
vous permettra de bien prendre en main le bash pour

00:32.759 --> 00:37.400
faire vos premiers pas. Et puis par la suite je
pourrais vous proposer d'autres vidÃ©os pour

00:37.400 --> 00:42.560
approfondir le sujet et aborder des notions
complÃ©mentaires comme les structures conditionnelles

00:42.560 --> 00:47.959
les boucles, etc. N'hÃ©sitez pas aussi Ã  commenter
cette vidÃ©o pour me dire si c'est un sujet qui

00:47.959 --> 00:52.639
vous intÃ©resse, si c'est un sujet pour lequel
vous aimeriez plus de contenu, pour aussi que

00:52.639 --> 00:57.080
j'adapte en fonction de ce que vous aimeriez
voir sur la chaÃ®ne YouTube ITConnect. Nous

00:57.080 --> 01:00.720
allons tout de suite rentrer dans le vif du sujet
mais avant cela pensez Ã  vous abonner Ã  la chaÃ®ne

01:00.720 --> 01:10.760
YouTube ITConnect. Le bash est l'un des interprÃ©teurs
de commandes les plus populaires sur les

01:10.760 --> 01:15.360
environnements Linux Unix. Effectivement on
va le retrouver par dÃ©faut sur de nombreuses

01:15.360 --> 01:22.120
distributions comme Debian, Ubuntu, Rocky Linux,
etc. On va installer ces distributions lÃ  et de

01:22.120 --> 01:26.760
base on aura accÃ¨s Ã  cet interprÃ©teur de
commandes qui est le bash. Alors c'est quoi le

01:26.760 --> 01:31.760
bash ? En fait c'est ce que l'on appelle un shell.
Le shell va Ãªtre une interface systÃ¨me qui

01:31.760 --> 01:36.760
va venir se positionner entre l'utilisateur
et le systÃ¨me d'exploitation et qui va nous

01:36.760 --> 01:42.239
permettre d'interagir avec le systÃ¨me d'exploitation
par l'intermÃ©diaire de commandes que l'on va venir

01:42.239 --> 01:48.000
exÃ©cuter. On va pouvoir utiliser le bash pour
faire de l'administration d'une machine locale

01:48.000 --> 01:53.559
donc pour gÃ©rer les fichiers, gÃ©rer les donnÃ©es,
etc. On va pouvoir faire de l'administration en

01:53.559 --> 01:59.239
ligne de commande de notre machine Linux, mais
on va aussi pouvoir s'appuyer sur le bash pour

01:59.239 --> 02:06.000
crÃ©er des scripts et donc automatiser des tÃ¢ches
diverses et variÃ©es, et notamment des tÃ¢ches qui

02:06.000 --> 02:10.720
vont Ãªtre rÃ©pÃ©titives. Aujourd'hui le bash est
une compÃ©tence essentielle pour ceux qui souhaitent

02:10.720 --> 02:15.960
faire de l'administration de machine Linux. Il
n'y a pas forcÃ©ment besoin d'Ãªtre expert en bash

02:15.960 --> 02:24.759
mais Ã§a me semble vraiment indispensable aujourd'hui pour tout administrateur systÃ¨me d'avoir
un minimum de connaissances sur le bash, au mÃªme titre qu'il faudra avoir un minimum de

02:24.759 --> 02:30.440
connaissances en PowerShell pour la partie
Windows, Windows Server. Pour utiliser le bash

02:30.440 --> 02:34.639
nous allons utiliser ce que l'on appelle un
terminal, donc notre shell. Dans notre shell

02:34.639 --> 02:39.119
on va Ã  l'intÃ©rieur exÃ©cuter diffÃ©rentes
commandes, et dans les scripts on pourra utiliser

02:39.119 --> 02:45.600
ces mÃªmes commandes ainsi que diffÃ©rentes
instructions. Voici la structure de base d'une

02:45.600 --> 02:51.199
commande en bash. On va tout d'abord avoir le nom
de la commande ici au tout dÃ©but, et derriÃ¨re

02:51.199 --> 02:56.800
potentiellement une ou plusieurs options et un
ou plusieurs arguments. On pourrait exÃ©cuter la

02:56.800 --> 03:01.639
commande ls seul, mais on peut aussi venir lui
ajouter une ou plusieurs options. Dans ce cas lÃ 

03:01.639 --> 03:07.800
ici on a l'option "-a". On pourrait avoir "-a", et
d'autres lettres encore derriÃ¨re en fonction des

03:07.800 --> 03:14.000
options qu'on veut utiliser. L'argument c'est
en quelque sorte la valeur de ce que l'on veut

03:14.000 --> 03:19.960
cibler. Ici on va cibler le rÃ©pertoire "-home",
"-flow". On pourrait avoir aussi plusieurs

03:19.960 --> 03:26.600
arguments, tout dÃ©pend de ce que va attendre la
commande en termes de valeur. Pour le nom des

03:26.600 --> 03:31.399
options, il faut savoir qu'on a deux faÃ§ons de
les Ã©crire. On a d'une part les noms longs et

03:31.399 --> 03:36.800
d'autre part les noms courts. Ici j'ai utilisÃ©
un nom court. Le nom long va Ãªtre comme ici

03:37.279 --> 03:46.240
"-le nom complet de l'option". Le nom court sera
seulement un tirÃ© et derriÃ¨re une lettre. Cette

03:46.240 --> 03:52.679
lettre n'est pas choisie par hasard, elle est
documentÃ©e dans l'aide de la commande en question

03:52.679 --> 03:58.399
On va toujours avoir un Ã©quivalent entre un nom
long et un nom court. Surtout comme on est sur

03:58.399 --> 04:03.800
Linux, il faut faire trÃ¨s attention Ã  la casse.
Ici le fait de mettre un tirÃ© R en majuscule ne

04:03.800 --> 04:08.559
sera pas la mÃªme chose que mettre un tirÃ© R en
minuscule. Il faut vraiment faire attention Ã  la

04:08.559 --> 04:12.720
casse sous Linux. VoilÃ  la syntaxe de base d'une
commande en bÃ¢che. Maintenant ce que je vous

04:12.720 --> 04:18.000
propose, c'est qu'on bascule sur une machine
Linux pour commencer Ã  exÃ©cuter nos premiÃ¨res

04:18.000 --> 04:26.760
commandes bÃ¢che. Par la suite, nous allons crÃ©er
notre premier script. Pour cette dÃ©monstration

04:26.760 --> 04:32.239
je vais utiliser une machine sous Ubuntu 24.04
avec un environnement de bureau installÃ©. Ce que

04:32.239 --> 04:38.320
je vais faire, c'est lancer le terminal. J'ai
directement accÃ¨s Ã  l'interprÃ¨teur de commandes

04:38.320 --> 04:45.679
bÃ¢che. Je vais commencer par faire exÃ©cuter une
premiÃ¨re commande, c'est la commande PWD. A quoi

04:45.679 --> 04:51.119
sert cette commande ? Elle sert Ã  m'indiquer le
rÃ©pertoire dans lequel je me situe au niveau de

04:51.119 --> 04:58.279
mon shell. Ici j'ai le tilde qui est prÃ©cisÃ©.
Le tilde veut dire quoi ? Ã‡a veut dire que mon

04:58.279 --> 05:05.640
shell est positionnÃ© dans mon rÃ©pertoire
utilisateur. Ce rÃ©pertoire utilisateur, c'est le

05:05.640 --> 05:12.880
dossier home flow, puisque je suis connectÃ© avec
l'utilisateur flow. Si je me dÃ©place dans le

05:12.880 --> 05:17.320
systÃ¨me de fichiers, je vais utiliser une autre
commande, la commande CD, qui va me permettre de

05:17.320 --> 05:23.399
naviguer sur le systÃ¨me de fichiers. Je pourrais
aller par exemple dans ETC, et si je relance la

05:23.399 --> 05:30.959
commande PWD, j'ai bien ici cette fois-ci comme
rÃ©pertoire courant. Ceci est intÃ©ressant de voir

05:30.959 --> 05:36.519
dans quel rÃ©pertoire on se situe, puisque quand
on va exÃ©cuter une commande bÃ¢che, parfois on va

05:36.519 --> 05:40.959
prÃ©ciser un chemin complet, mais si on ne prÃ©cise
pas de chemin, par exemple quand on va crÃ©er un

05:40.959 --> 05:47.959
fichier, il sera crÃ©Ã© ce fichier dans le rÃ©pertoire
courant dans lequel on se situe. L'information

05:47.959 --> 05:52.320
qui est ici, entre les deux points et le dollar,
nous indique bien le rÃ©pertoire dans lequel on se

05:52.320 --> 05:56.600
situe actuellement. On peut le vÃ©rifier avec
la commande PWD, mais pour le coup c'est une

05:56.600 --> 06:01.880
information quand mÃªme importante. Nous allons
maintenant Ã©voquer la commande LS, qui permet de

06:01.880 --> 06:08.359
lister le contenu d'un rÃ©pertoire. Je vais me
repositionner dans mon rÃ©pertoire home, et je vais

06:08.359 --> 06:14.880
simplement faire la commande LS, sans prÃ©ciser
le moindre argument derriÃ¨re. LÃ  il me liste le

06:14.880 --> 06:18.760
contenu du dossier. Maintenant, comme je l'ai
expliquÃ© en introduction, on peut utiliser

06:18.920 --> 06:24.239
diffÃ©rentes commandes, diffÃ©rents arguments. Je
vais pouvoir faire par exemple un LS-L. LÃ  on

06:24.239 --> 06:29.200
voit bien qu'il m'a listÃ© le contenu de mon
rÃ©pertoire courant, puisque je n'ai pas prÃ©cisÃ

06:29.200 --> 06:35.519
d'argument derriÃ¨re. Du coup on pourrait faire
un LS-L et prÃ©ciser un chemin, par exemple

06:35.519 --> 06:42.760
slashetc, et lÃ  il me liste bien ce qui est dans
slashetc sur ma machine. On voit bien l'intÃ©rÃªt

06:42.760 --> 06:48.279
de prÃ©ciser ou non une valeur pour l'argument qui
vient derriÃ¨re la commande. Maintenant on pourrait

06:48.359 --> 06:53.160
se demander comment on fait pour explorer des
options supplÃ©mentaires, pour voir quelles sont

06:53.160 --> 07:02.239
les possibilitÃ©s offertes par la commande LS. Dans
ce cas lÃ , on va faire un LS-LP. En gÃ©nÃ©ral

07:02.239 --> 07:07.799
Ã§a fonctionne avec toutes les commandes. On fait
un LS-LP et Ã§a nous affiche l'aide de la commande

07:07.799 --> 07:13.279
Donc lÃ  on peut savoir Ã  quoi sert cette commande,
Ã  quoi servent les diffÃ©rentes options. On a Ã

07:13.279 --> 07:18.839
chaque fois le nom court et le nom long de la
commande, comme je l'Ã©voquais tout Ã  l'heure

07:18.839 --> 07:26.399
On peut utiliser ce que l'on souhaite. LÃ  je vais
avoir des explications pour l'ensemble des options

07:26.399 --> 07:32.600
disponibles pour cette commande. Cela me permet
d'en savoir plus. Il faut savoir aussi qu'on peut

07:32.600 --> 07:36.799
consulter Ã  partir de la ligne de commande ce que
l'on appelle les pages de manuel. En fait on va

07:36.799 --> 07:41.040
tout simplement faire un man et derriÃ¨re on va
mettre le nom de la commande, par exemple man

07:41.040 --> 07:49.959
LS. On va ouvrir la documentation, les pages de
manuel de la commande LS. On a des informations

07:49.959 --> 07:55.040
de maniÃ¨re un peu plus structurÃ©es encore sur
l'utilisation de cette commande. On va retrouver

07:55.040 --> 08:00.320
les diffÃ©rentes options, leurs significations,
etc. Donc lÃ  on a vraiment l'aide complÃ¨te. Cette

08:00.320 --> 08:06.239
aide complÃ¨te, ce que l'on appelle les man pages,
on peut les retrouver aussi sur internet. Il y a

08:06.239 --> 08:10.640
plusieurs sites qui proposent des versions en
ligne de ces aides. Donc lÃ  on a quand mÃªme

08:10.720 --> 08:15.399
plus d'informations que quand on fait le "- "-
help. Cela peut Ãªtre intÃ©ressant d'aller faire un

08:15.399 --> 08:19.600
tour ici. Ce que je vous propose c'est qu'on
explore un petit peu plus d'autres commandes

08:19.600 --> 08:26.480
par exemple pour explorer la commande mkdir.
Ici je vais faire un ls et je vais faire mkdir

08:26.480 --> 08:30.119
Alors mkdir c'est quoi ? Cela veut dire make
directory, c'est une commande qui va nous

08:30.119 --> 08:34.359
permettre de crÃ©er un rÃ©pertoire ou plusieurs
rÃ©pertoires. Je pourrais tout simplement faire

08:34.359 --> 08:40.239
un mkdir demo ici et je vais avoir crÃ©Ã© en
principe un dossier qui va s'appeler demo Ã

08:40.320 --> 08:44.919
la racine de mon profil utilisateur, puisque je
suis bien positionnÃ© ici Ã  la racine de mon

08:44.919 --> 08:50.380
profil. On le crÃ©e dans le rÃ©pertoire courant.
Si je fais un ls tout simplement, mon dossier

08:50.380 --> 08:57.640
demo qui n'Ã©tait pas lÃ  ici est prÃ©sent dÃ©sormais.
Pourrions aussi prÃ©ciser le chemin complet si on

08:57.640 --> 09:02.880
veut crÃ©er le dossier demo dans un rÃ©pertoire
spÃ©cifique qui n'est pas le rÃ©pertoire courant

09:02.880 --> 09:07.599
Et on peut crÃ©er dans ce dossier demo plusieurs
sous-dossiers. Dans ce cas lÃ  on va faire un

09:07.599 --> 09:12.159
slash, on va mettre des accolades et entre
les accolades on va venir mettre les noms des

09:12.159 --> 09:16.919
dossiers qu'on veut crÃ©er. Par exemple ici dossier
1 et dossier 2. On met les noms entre guillemets

09:16.919 --> 09:22.840
on les sÃ©pare par une virgule, on fait un trait.
Maintenant si je fais un ls-l de mon home flow

09:22.840 --> 09:29.960
demo, j'ai bien dossier 1 et dossier 2 qui ont
Ã©tÃ© crÃ©Ã©s. On voit qu'on peut optimiser puisque

09:29.960 --> 09:34.000
sinon j'aurais dÃ» faire plusieurs commandes
mkdir. Une autre commande qui peut Ãªtre assez

09:34.000 --> 09:42.119
intÃ©ressante c'est la commande touch. La commande
touch va nous servir Ã  crÃ©er un fichier vide

09:42.119 --> 09:47.880
On utilise aussi en gÃ©nÃ©ral cette fichier pour
venir jouer sur l'horodatage des horaires d'accÃ¨s

09:47.880 --> 09:54.760
des fichiers. Si je veux crÃ©er le fichier
itconnect.txt dans le dossier 1 que j'ai crÃ©Ã

09:54.760 --> 09:59.960
prÃ©cÃ©demment, il suffit de faire touch comme ceci
et le dossier a Ã©tÃ© crÃ©Ã©. D'ailleurs si je fais

09:59.960 --> 10:06.119
un ls dans le dossier 1, je vois bien que mon fichier
a Ã©tÃ© crÃ©Ã©. C'est un fichier vide mais il a

10:06.119 --> 10:11.440
Ã©tÃ© crÃ©Ã©, maintenant je pourrais l'Ã©diter et
ajouter du contenu. C'est une Ã©tape malgrÃ© tout

10:11.440 --> 10:16.320
facultative puisqu'on pourrait ouvrir ce fichier
avec un Ã©diteur de texte mÃªme s'il n'existe pas

10:16.320 --> 10:21.280
l'enregistrer ce qui permettrait de le crÃ©er Ã 
l'emplacement souhaitÃ©. Enfin, on va Ã©voquer

10:21.280 --> 10:25.559
pour terminer avant de passer Ã  la rÃ©daction de
notre premier script, une autre commande trÃ¨s

10:25.559 --> 10:31.679
intÃ©ressante mais aussi relativement dangereuse,
c'est la commande rm qui va nous permettre de

10:31.679 --> 10:37.919
supprimer des dossiers et leur contenu ou supprimer
un fichier ou des fichiers. C'est une commande de

10:37.919 --> 10:42.200
suppression de donnÃ©es. Pourquoi je dis qu'elle
est potentiellement dangereuse ? C'est Ã  dire

10:42.200 --> 10:47.919
qu'une mauvaise manipulation de cette commande, on
pourrait cibler sans faire exprÃ¨s des rÃ©pertoires

10:47.919 --> 10:52.679
systÃ¨me et procÃ©der Ã  la suppression. On peut
vraiment faire planter une machine Linux si on

10:52.679 --> 10:58.640
utilise mal la commande rm. Il faut vraiment faire
attention Ã  ce que l'on va cibler quand on va faire

10:58.640 --> 11:05.679
un rm. Typiquement, je pourrais chercher Ã  vider
le contenu de mon rÃ©pertoire dossier 1. Dans ce

11:05.679 --> 11:10.440
cas-lÃ , je mets le nom du chemin complet et je
vais venir mettre une Ã©toile. Le fait de mettre un

11:10.440 --> 11:15.760
"-r", Ã§a permet d'avoir la rÃ©cursivitÃ©. Je
vais vraiment supprimer tout ce qu'il y a dans ce

11:15.760 --> 11:22.239
rÃ©pertoire, sous cette arborescence et l'Ã©toile
permet de cibler le contenu du rÃ©pertoire et non

11:22.400 --> 11:28.440
le rÃ©pertoire en lui-mÃªme. Cela me permet de
supprimer le contenu de mon dossier 1. En l'occurrence

11:28.440 --> 11:34.679
ici, Ã§a a bien supprimÃ© le fichier itconnect.txt.
Maintenant, si je veux supprimer le rÃ©pertoire

11:34.679 --> 11:39.799
dÃ©mo en lui-mÃªme, je vais faire simplement un
rm-r et je vais venir prÃ©ciser le dossier comme

11:39.799 --> 11:46.640
ceci. Si je fais un ls home flow, on voit que mon
dossier dÃ©mo a disparu, n'est plus lÃ , il a Ã©tÃ

11:46.640 --> 11:50.719
supprimÃ© et tous ses sous-dossiers ont Ã©tÃ©
supprimÃ©s Ã©galement. Nous venons de voir des

11:50.719 --> 11:55.719
commandes de base pour la navigation sur le systÃ¨me,
pour la manipulation de donnÃ©es, crÃ©er un fichier

11:55.719 --> 12:01.840
crÃ©er un dossier, supprimer un fichier ou
un dossier, etc. C'est vraiment la base pour

12:01.840 --> 12:06.840
prendre en main le Shell Bash sur une machine
Linux. Il faut savoir que des commandes en

12:06.840 --> 12:11.640
existent des dizaines, des centaines, donc on ne
peut pas tout prÃ©senter dans une vidÃ©o. Ce qu'il

12:11.640 --> 12:15.840
faut, c'est au fur et Ã  mesure des besoins,
explorer des commandes, explorer des notions

12:15.840 --> 12:19.520
LÃ , c'est vraiment une introduction. Maintenant,
ce que l'on va faire, c'est voir comment crÃ©er

12:19.520 --> 12:29.440
notre premier script Bash sur une machine Linux.
DÃ©jÃ , ce qu'il faut savoir, c'est qu'un script Bash

12:29.440 --> 12:35.919
va avoir l'extension .sh. Quand vous voyez un
fichier .sh, cela veut dire que cela correspond

12:35.919 --> 12:41.000
Ã  un script Bash. Ce que l'on va faire, c'est tout
simplement crÃ©er ce fichier. On va crÃ©er ce fichier

12:41.000 --> 12:49.400
vide. On a vu qu'on pouvait le crÃ©er avec la commande touch, donc c'est ce que l'on va faire,
cela va nous permettre de manipuler un petit peu. Par exemple, ce fichier, je vais l'appeler

12:49.400 --> 12:57.840
script-demo.sh et je vais le crÃ©er Ã  la racine de
mon rÃ©pertoire personnel. J'ai bien crÃ©Ã© ce fichier

12:57.840 --> 13:03.159
on le voit, il est ici. Il est totalement vide, il
fait 0 octets. Maintenant, on va se demander comment

13:03.159 --> 13:08.440
on peut faire pour Ã©diter ce fichier, pour Ã©crire
notre script. On a plusieurs possibilitÃ©s. On va

13:08.440 --> 13:13.799
pouvoir utiliser un Ã©diteur de texte classique,
tel que le trÃ¨s simple Nano ou le plus complet

13:14.359 --> 13:18.679
Vim sur la machine Linux. On va pouvoir Ã©diter
notre script, indiquer les lignes de commandes

13:18.679 --> 13:23.400
etc. que l'on souhaite. On peut aussi aller plus
loin et utiliser une application comme Visual

13:23.400 --> 13:28.679
Studio Code, que vous pouvez installer facilement Ã 
partir du centre d'application sur Ubuntu ou avec

13:28.679 --> 13:33.679
une simple commande apt-get install, puisqu'il y a
vraiment un paquet qui est prÃªt Ã  l'emploi pour

13:33.679 --> 13:41.080
cela. Cela vous permet ensuite d'avoir sur la
machine Linux le Visual Studio Code. Dans le

13:41.080 --> 13:46.559
Visual Studio Code, vous pouvez Ã©crire vos
scripts, les exÃ©cuter, etc. Vous avez vraiment un

13:46.559 --> 13:52.719
Ã©diteur de code trÃ¨s complet. C'est un Ã©diteur de
code gratuit et open source proposÃ© par Microsoft

13:52.719 --> 13:56.919
LÃ , je ne vais pas vous imposer l'utilisation
de Visual Studio Code. Ce que l'on va faire

13:56.919 --> 14:02.479
c'est utiliser le Nano, qui est vraiment un Ã©diteur
de texte trÃ¨s simple. Vous allez pouvoir crÃ©er

14:02.479 --> 14:07.320
votre premier script Bash avec Nano sans aucun
souci. Ce que l'on va faire, c'est ouvrir ce

14:07.320 --> 14:14.200
fichier. On va faire un Nano et on va appeler
script-demo.sh. On se retrouve avec notre script

14:14.200 --> 14:19.320
il est vide. Qu'allons-nous ajouter dans ce script
? Il faut savoir que la premiÃ¨re ligne de votre

14:19.320 --> 14:25.640
script doit Ãªtre ce que l'on appelle le Shebang.
Le Shebang, c'est une ligne qui va permettre Ã

14:25.640 --> 14:32.119
votre machine de savoir quel interprÃ¨teur de script
doit Ãªtre utilisÃ© pour exÃ©cuter le contenu du

14:32.119 --> 14:39.320
fichier. En l'occurrence, ici, Ã§a va Ãªtre
Bash. On va prÃ©ciser "-!" et le chemin vers Bash

14:39.320 --> 14:47.039
Cela va permettre Ã  Linux de savoir ce script-lÃ ,
il faut l'exÃ©cuter avec Bash. C'est vraiment trÃ¨s

14:47.039 --> 14:51.719
important d'ajouter cette premiÃ¨re ligne. LÃ ,
c'est du Bash, donc on met Ã§a et en fonction de

14:51.719 --> 14:55.799
ce qu'on utilise, on va venir adapter. C'est
forcÃ©ment la premiÃ¨re ligne de votre script

14:55.799 --> 15:01.039
Ensuite, vous allez venir ajouter vos commandes.
Cela va dÃ©pendre de vos besoins. On va tout

15:01.039 --> 15:05.880
simplement faire un Ã©cho, cela va permettre
d'afficher un message dans la console. On va

15:05.880 --> 15:13.520
mettre par exemple, Hello World ! Demo IT Connect
! On va faire Ã§a, on met bien un guillemet Ã  la

15:13.520 --> 15:18.400
fin. On pourrait mÃªme, pour respecter les bonnes
pratiques, ajouter un commentaire. On ajoute un

15:18.400 --> 15:23.039
commentaire en mettant un diÃ¨se et le texte
derriÃ¨re pour dÃ©crire la ligne de commande qui

15:23.039 --> 15:29.440
suit. On va mettre, voilÃ , Ã©crire un texte dans
la console. Une fois qu'on a fait Ã§a, on va

15:29.440 --> 15:34.960
enregistrer le fichier. C'est CTRL O avec Nano.
Ensuite, on fait entrer, voilÃ , et on va pouvoir

15:34.960 --> 15:40.080
fermer. Comment on va pouvoir maintenant exÃ©cuter
ce script ? Ce que l'on va faire pour exÃ©cuter le

15:40.080 --> 15:45.440
script, c'est un .slash et le nom du script
derriÃ¨re. Je vais faire script-demo.slash

15:45.440 --> 15:49.919
je fais entrer et lÃ , il me dit Â« Permission
non accordÃ©e Â». Pourquoi ? Effectivement

15:49.919 --> 15:57.200
si je fais un ls-l, quand on fait ls-l, la commande
ls nous retourne la liste du contenu du rÃ©pertoire

15:57.200 --> 16:01.520
et on a aussi une visibilitÃ© sur les droits. On
peut voir au niveau des droits qu'il y a des droits

16:01.520 --> 16:07.559
en lecture-Ã©criture pour l'utilisateur propriÃ©taire,
le groupe propriÃ©taire, et des droits en lecture

16:07.559 --> 16:13.919
pour les autres. Ce qui va nous manquer ici, c'est
le droit d'exÃ©cution, le droit d'exÃ©cuter le

16:13.919 --> 16:18.039
script. C'est pour Ã§a qu'il va falloir rajouter
des permissions sur ce fichier avant de pouvoir

16:18.039 --> 16:26.159
l'exÃ©cuter. Ce qu'on va faire, c'est un chmod plus
x sur le fichier script-demo.sh. LÃ , si je refais

16:26.159 --> 16:30.880
un ls-l, cette fois-ci, j'ai bien le droit
d'exÃ©cuter. On voit d'ailleurs qu'il y a eu un

16:30.880 --> 16:35.799
changement au niveau des couleurs ici. Je vais
pouvoir tenter d'exÃ©cuter une nouvelle fois mon

16:35.799 --> 16:41.200
script. Je vais faire script-demo.sh. Pensez aussi
Ã  utiliser la tabulation pour bÃ©nÃ©ficier de

16:41.200 --> 16:47.679
l'autocomplÃ©tion. On va exÃ©cuter et mon script
fonctionne puisqu'on me retourne bien Â« Hello World

16:47.679 --> 16:52.960
Demo IT Connect Â». On vient de crÃ©er un premier
script trÃ¨s basique, mais on a crÃ©Ã© notre premier

16:52.960 --> 16:59.679
script-demo.sh. Pour finir, je vais vous montrer
un autre script qui s'appelle ping.sh. Je vais

16:59.679 --> 17:09.400
vous montrer ce script qui va aller un peu plus loin, qui va me permettre d'aborder d'autres
notions. Je vais vous expliquer la notion de variable, des choses comme Ã§a. Ce script qui

17:09.400 --> 17:16.319
est Ã  l'Ã©cran permet tout simplement de dÃ©finir
l'adresse IP ou le nom d'un serveur. Ensuite

17:16.319 --> 17:21.680
on va faire un ping sur ce serveur et on va dire
est-ce que oui ou non ce serveur a rÃ©pondu au

17:21.680 --> 17:26.479
ping ? C'est quelque chose de trÃ¨s simple, mais
qui permet d'introduire certaines notions. Tout

17:26.479 --> 17:31.719
d'abord la notion de variable, qui va nous
permettre de stocker une valeur, une information

17:31.719 --> 17:38.040
en mÃ©moire. Ici, c'est une variable qui s'appelle
serveur. Je stocke dedans l'information qui est

17:38.040 --> 17:48.599
l'adresse IP 192.168.1.254. Si j'appelle ma
variable serveur, cela revient Ã  appeler la

17:48.599 --> 17:53.000
valeur qui est Ã  l'intÃ©rieur, puisque cette
variable sera remplacÃ©e par sa valeur. Ce qui

17:53.000 --> 17:58.880
veut dire qu'ensuite quand je vais faire un
ping, un ping-C2. Pourquoi un ping-C2 ? Sur Linux

17:58.880 --> 18:05.000
quand on fait un ping, c'est un ping indÃ©fini.
Il ne va jamais s'arrÃªter. Le fait de faire un

18:05.000 --> 18:14.479
ping-C2, on va dire qu'on va faire deux pings.
La cible du ping, c'est qui ? C'est $server

18:14.800 --> 18:18.599
c'est Ã  dire ma variable serveur. On voit bien
ici que quand on dÃ©clare une variable, on ne met

18:18.599 --> 18:23.359
pas le dollar, on met le nom de la variable,
qui Ã©gale la valeur. Ce qui est important

18:23.359 --> 18:28.760
c'est de ne pas mettre d'espace ni avant ni
aprÃ¨s, sinon cela renverra une erreur. J'ai

18:28.760 --> 18:33.839
bien affectÃ© cette valeur Ã  ma variable, et
ensuite pour lire le contenu de la variable

18:33.839 --> 18:38.239
je fais un $le nom de la variable, comme on peut
le voir ici. Ensuite, qu'est-ce que c'est que

18:38.319 --> 18:46.479
cette flÃ¨che pour rediriger vers $devnull ?
C'est pour masquer la sortie de la commande. Mon

18:46.479 --> 18:51.599
objectif, ce n'est pas d'afficher le rÃ©sultat du
ping directement dans la console, c'est d'afficher

18:51.599 --> 18:58.359
soit ce texte, soit ce texte en fonction du
rÃ©sultat du ping. La sortie de la commande ping

18:58.359 --> 19:05.400
je veux en quelque sorte la masquer. Je la redirige
vers $devnull, elle sera cachÃ©e puisqu'elle est

19:05.400 --> 19:12.199
envoyÃ©e vers un pÃ©riphÃ©rique qui est nul.
AprÃ¨s, ce que l'on va faire, c'est utiliser une

19:12.199 --> 19:17.079
structure conditionnelle if pour dÃ©terminer si
le serveur est en ligne ou pas, c'est-Ã -dire

19:17.079 --> 19:23.319
est-ce qu'il a rÃ©pondu au ping ou non. Ce que l'on
va faire, c'est utiliser $.interrogation. Cela

19:23.319 --> 19:28.079
nous permet de savoir si la derniÃ¨re commande
qu'on a exÃ©cutÃ©e, en l'occurrence ici le ping

19:28.680 --> 19:33.079
est-ce que cette commande s'est bien exÃ©cutÃ©e
ou non. C'est une variable spÃ©ciale qui est

19:33.079 --> 19:39.839
alimentÃ©e automatiquement par $.bash. Si on a un
code de retour qui est de 0, cela veut dire que

19:39.839 --> 19:45.160
la commande s'est bien exÃ©cutÃ©e. Si on a un autre
code, c'est qu'il y a eu un problÃ¨me. Du coup

19:45.160 --> 19:49.280
on va regarder avec le $.if, si on essaie de
traduire ce que j'ai voulu faire de maniÃ¨re

19:49.280 --> 19:55.579
littÃ©raire. Si le code de retour de la derniÃ¨re
commande n'est pas Ã©gal Ã  0, alors on Ã©crit

19:55.579 --> 20:01.040
erreur, le serveur n'a pas rÃ©pondu au ping.
Sinon, cela veut dire que le code de retour est

20:01.040 --> 20:10.400
Ã©gal Ã  0, implicitement. Le serveur est en ligne
et cette instruction permet de finir la structure

20:10.400 --> 20:15.640
conditionnelle. Je pourrais vous proposer une
vidÃ©o complÃ¨te sur les structures conditionnelles

20:15.640 --> 20:21.359
pour vous expliquer tout cela dans le dÃ©tail.
LÃ , on fait vraiment un test de si le code de

20:21.359 --> 20:27.160
retour de cette commande n'est pas Ã©gal Ã  0. Si
cette condition est vraie, et uniquement dans ce

20:27.239 --> 20:32.680
cas-lÃ , on va exÃ©cuter ce qu'il y a Ã  l'intÃ©rieur
de ce premier bloc, entre le $then et le $else

20:32.680 --> 20:38.560
Et sinon, on va exÃ©cuter ce qui est ici. VoilÃ 
pour ce premier script bash un peu plus Ã©voluÃ

20:38.560 --> 20:48.920
que le premier que je vous ai prÃ©sentÃ©. Maintenant, ce que l'on peut faire, c'est tout
simplement l'exÃ©cuter. J'ai dÃ©jÃ  fait un chmod plus x sur le fichier ping.sh. LÃ 

20:48.920 --> 20:53.959
il est en train de faire des pings et il me
retourne bien. Le serveur me remet l'adresse IP

20:53.959 --> 20:59.239
parce qu'on a prÃ©cisÃ© ici le contenu. On a
fait appel Ã  la variable, donc la variable est

20:59.239 --> 21:05.800
remplacÃ©e par sa valeur. Le serveur est en ligne.
J'ai bien eu le retour attendu dans la console

21:05.800 --> 21:11.000
Je n'ai pas eu le dÃ©tail de la sortie du ping,
mais simplement mon texte personnalisÃ© que j'ai

21:11.000 --> 21:20.199
dÃ©fini dans le script. Pour finir, je vous propose
de vous parler du pipeline en bÃ¢che. C'est quoi

21:20.199 --> 21:27.560
le pipeline ? C'est le caractÃ¨re que vous avez
sur la touche 6 d'un clavier AZERTY. C'est ce que

21:27.560 --> 21:31.920
l'on peut appeler la barre verticale. C'est le
caractÃ¨re que je vous ai mis Ã  l'Ã©cran. Il va

21:31.920 --> 21:37.719
jouer un rÃ´le clÃ©, puisqu'il va nous permettre
de connecter plusieurs commandes ensemble. Le

21:37.719 --> 21:42.760
rÃ©sultat d'une premiÃ¨re commande sera envoyÃ© Ã 
une deuxiÃ¨me commande, et le rÃ©sultat de cette

21:42.760 --> 21:46.839
deuxiÃ¨me commande pourrait Ãªtre envoyÃ© Ã  une
troisiÃ¨me commande, etc. Ce qui va Ãªtre trÃ¨s

21:46.839 --> 21:51.239
intÃ©ressant, par exemple, pour exÃ©cuter une
commande en fonction du rÃ©sultat de la premiÃ¨re

21:51.239 --> 21:57.160
commande, ou aussi pour appliquer des filtres,
faire des recherches, etc. Si on prend l'exemple

21:57.160 --> 22:05.359
de mon script ping.sh, j'aimerais savoir dans ce
script combien il y a de lignes. Pour afficher le

22:05.359 --> 22:10.439
contenu d'un fichier, on peut utiliser la commande
cat. On fait cat, le nom du fichier derriÃ¨re

22:10.439 --> 22:14.400
Cela m'affiche tout simplement le contenu du
fichier. Ce que je vais faire Ã  partir de lÃ 

22:14.560 --> 22:19.199
c'est avec le pipeline. Le pipeline vient
toujours se positionner aprÃ¨s une premiÃ¨re

22:19.199 --> 22:24.000
commande. Vous ne pouvez pas commencer une ligne
avec un pipeline. DerriÃ¨re, je vais envoyer le

22:24.000 --> 22:29.479
rÃ©sultat de cette commande, c'est-Ã -dire
le contenu de mon fichier, Ã  la commande wc

22:29.479 --> 22:36.520
qui signifie word count. C'est une commande
qui permet de compter le nombre de mots

22:36.520 --> 22:43.280
le nombre de lignes dans un fichier. On va
utiliser l'option "-l", pour retourner uniquement

22:43.280 --> 22:49.719
le nombre de lignes prÃ©sentes dans le fichier. Je
fais entrer et on me dit que ce fichier contient

22:49.719 --> 22:56.239
15 lignes. On voit bien tout de suite l'intÃ©rÃªt
du pipeline, l'interconnexion qu'il y a eu entre

22:56.239 --> 23:01.400
ma premiÃ¨re commande et ma deuxiÃ¨me commande.
C'est vraiment quelque chose de trÃ¨s intÃ©ressant

23:01.400 --> 23:07.920
Nous pouvons utiliser cette notion de pipeline
pour faire des recherches dans un fichier avec

23:07.920 --> 23:13.079
la commande grep, qui est vraiment indispensable
sous Linux et trÃ¨s puissante. Si je fais un

23:13.079 --> 23:18.239
grep ping, par exemple, j'affiche le contenu
de mon fichier, je fais un grep ping et il me

23:18.239 --> 23:23.280
retourne toutes les lignes de mon fichier
qui contiennent le mot ping. Je vois bien ici

23:23.280 --> 23:28.280
j'ai un premier commentaire, un deuxiÃ¨me, bien
entendu j'ai ma commande ping et j'ai la commande

23:28.280 --> 23:34.280
echo qui est ici, puisque cette commande echo
contient Ã©galement le mot clÃ© ping que j'ai

23:34.280 --> 23:37.839
recherchÃ©. C'est vraiment un exemple trÃ¨s simple
de recherche, mais Ã§a vous montre un petit peu

23:37.839 --> 23:42.719
Ã©galement ce que l'on peut faire avec le pipeline
et aussi un rapide aperÃ§u de la commande grep

23:42.719 --> 23:52.439
VoilÃ  cette vidÃ©o d'introduction au scripting
Bash, Ã  la rÃ©daction de script Bash est Ã

23:52.439 --> 23:56.599
prÃ©sent terminÃ©e. J'espÃ¨re que Ã§a vous
a plu, sachez que vous pouvez utiliser le

23:56.599 --> 24:00.119
Bash sur une machine Linux telle que
Ubuntu, comme je l'ai prÃ©sentÃ© ici

24:00.119 --> 24:04.599
sur une Debian ou autre, mais Ã©galement sur
Windows, puisque vous pouvez installer Windows

24:04.599 --> 24:11.079
Subsystem for Linux ou WSL, ce qui vous permet
d'utiliser Linux depuis Windows. LÃ  vous allez

24:11.079 --> 24:15.959
avoir la possibilitÃ© d'exÃ©cuter des commandes
Bash, mais aussi de crÃ©er des scripts, donc Ã§a

24:15.959 --> 24:20.199
vous permet en quelque sorte d'utiliser le Bash
depuis Windows si vous voulez vous entraÃ®ner

24:20.199 --> 24:25.439
sans avoir une autre machine ou sans utiliser une
machine virtuelle si votre poste de travail n'est

24:25.439 --> 24:30.319
pas sur Linux. J'espÃ¨re que Ã§a vous a plu,
n'hÃ©sitez pas surtout Ã  me dire si vous voulez

24:30.319 --> 24:35.079
plus de contenu sur le scripting Bash, si c'est
un sujet qui vous intÃ©resse. En attendant

24:35.079 --> 24:39.800
bien pensez Ã  liker, Ã  commenter et Ã  partager au
max cette vidÃ©o ! Je vous dis Ã  trÃ¨s vite, ciao 
