Précédemment dans la formation :
Aujourd’hui, parlons de scripts shell. Ce premier article est une simple introduction, mais par la suite, je ferai sûrement un deuxième, voire un troisième article sur ce sujet.
Sommaire :
I. Programmation avec des scripts Shell
II. Créer et exécuter des scripts Shell
III. Notre premier script Shell
I. Programmation avec des scripts Shell
Il est possible de taper des lignes de commandes dans un shell, mais également de programmer en shell ! Lorsqu’on parle de programmation shell, on parle d’un concept général qui englobe l’écriture de scripts shell pour divers interpréteurs de commandes Unix.
Il est donc possible d’écrire des scripts en langage Bash et d’utiliser Bash comme un langage de programmation !
L’idée des scripts est de réaliser des tâches qu'une simple commande ne pourrait pas gérer.
Comme tout bon langage de programmation, le shell dispose de variables, de structures conditionnelles (if-then-else), de boucles, d'entrées et de sorties, et bien plus encore.
Le scripting shell est un sujet à part entière qui mériterait sa propre formation. Le but ici est de vous donner quelques billes pour que vous puissiez vous débrouiller et creuser plus loin le cas échéant.
II. Créer et exécuter des scripts Shell
Pour créer un script shell, il suffit d’écrire des commandes Bash dans un fichier, comme vous les saisiriez dans le terminal. Pour exécuter le script, vous avez trois options :
1) Ajouter un shebang #!/bin/bash
et rendre le fichier exécutable
C’est la méthode la plus courante pour exécuter des scripts. Ajoutez la ligne suivante tout en haut du fichier script :
#!/bin/bash
Le shebang est la première ligne d’un script. Elle indique au système quel interpréteur utiliser pour exécuter le code (par exemple Bash). Ce chemin garantit que le script est exécuté correctement avec le bon interpréteur. Cette ligne doit impérativement être la première du fichier, alignée à gauche.
Si aucun shebang n’est précisé le script sera exécuté avec l’interpréteur de code de base fournit par le shell. Si vous utilisez un terminal avec bash, ce sera bash par défaut.
Ensuite, il faut rendre le fichier exécutable :
chmod +x monscript
Optionnellement, vous pouvez déplacez le script dans un répertoire inclus dans votre chemin d’exécution (PATH
). Vous pourrez alors l’exécuter comme n’importe quelle autre commande :
monscript
Si le script se trouve dans votre répertoire courant, mais que ce répertoire (“.”) n’est pas inclus dans votre PATH
, vous devrez ajouter “./” devant la commande pour que le shell trouve le script :
./monscript
Notez que le répertoire courant n’est généralement pas inclus dans le PATH
pour des raisons de sécurité. (Vous ne voudriez pas qu’un script local appelé, par exemple, “ls”, remplace la vraie commande ls
;)
.)
2) Passer le script à bash
La commande bash
peut prendre comme argument le nom d’un fichier et l’éxécuter comme script :
bash monscript
Tout simplement.
3) Exécuter dans le shell actuel avec “.” ou source
Je vous avez déjà parlé de cette méthode lors du cours 2 de la formation :
En effet les méthodes précédentes exécutent votre script comme une entité indépendante, sans affecter votre shell actuel. Mais si vous voulez que votre script modifie votre shell actuel (par exemple, définir des variables ou modifier la variable PATH via notre .bahsrc, ou changez de répertoir, etc.), vous pouvez l’exécuter dans le shell courant avec la commande source
ou “.” :
. monscript
source monscript
III. Notre premier script Shell
1)Here document
J’en profite pour vous introduire les here documents, ou documents en ligne en français.
C’est une fonctionnalité du shell qui permet de saisir des commandes simplement sur plusieurs lignes. On définit un délimiteur au début, et tant qu’on ne retourne pas ce délimiteur au shell, nous pouvons écrire du texte et sauter des lignes.
Voici la syntaxe :
commande << DÉLIMITEUR
contenu
du
here document
DÉLIMITEUR
Exemple très simple :
ls << FIN_DE_COMMANDE
-l
mon_dossier
FIN_DE_COMMANDE
De cette manière j’ai pu écrire la commande ls -l mon_dossier
sur plusieurs lignes.
2)Créer un fichier avec un here document
Si vous vous rappelez du cours 6 sur les redirections, vous devez vous souvenir qu’on peut rediriger un peu tout ce qu’on veut dans un fichier. Eh bien, je vais vous montrer un trick spécial avec les here documents et la commande cat
. En ajoutant simplement à la commande “cat << DELIMITEUR
”
et
“> mon_fichier
”, il est possible de rediriger tout ce que nous allons écrire sur les différentes lignes dans le fichier indiqué.
En fait, si vous utilisez cat
sans argument et appuyez sur Entrée, le comportement par défaut de cat
est de renvoyer ce que vous avez saisi.
cat
salut
salut
ça va bien ?
ça va bien ?
tu vas arrêter de répéter tout ce que je dis !?
tu vas arrêter de répéter tout ce que je dis !?
En combinaison avec un here document, la commande cat
va répéter tout ce qu’on a marqué dans le here document en sortie. Ensuite, avec la redirection, on redirige la sortie vers le fichier cible.
Remarque : Par convention, lorsqu’on crée un fichier de cette manière, on utilise le délimiteur EOF
pour “end of file”.
3)Notre premier script bash
Nous allons pouvoir utiliser ce que nous avons vu précédemment pour créer un petit script simple avec plusieurs commandes Bash. Le but du script sera d’afficher le répertoire courant et les dossiers/fichiers présents dedans, en utilisant également la commande echo
pour afficher du texte et indiquer ce que le script est en train de faire.
Placez-vous dans le dossier de votre choix et commencez par taper :
cat << EOF >mon_script.sh
Et recopiez les lignes suivantes les unes à la suite des autres (pour copier-coller dans le terminal, il est nécessaire d’utiliser Ctrl+Shift+C ou Ctrl+Shift+V, sinon vous risquez d’ajouter des caractères parasites) :
#!/bin/bash #notre shebang !
echo "[Début du script]"
echo "où suis-je ? Réponse : "
pwd
echo "Quels sont les fichiers/dossiers dans ce répertoire ?"
ls -l
echo "[fin du script]"
EOF
Le résultat dans le terminal :
Nous avons donc un script mon_script.sh. Nous pouvons consulter son contenu avec cat
ou less
:
Super, maintenant exécutons le :
bash mon_script.sh
Et tada ! :
Le script nous retourne dans quel répertoire il a été exécuté ainsi que les fichiers et dossiers présents dans celui-ci.