Sommaire
- Présentation
- Les bases
- Variables
- Conditions
- Boucles
- Fonctions
- Mon premier script
- Approfondir mes connaissances
- Bibliographie
Présentation
Si vous avez cliquer sur ce lien c’est que vous souhaitez apprendre le scripting avec la langage de programmation Bash !
Si vous possédez déjà les bases et que vous souhaitez approfondir vos connaissances, je vous conseille de vous rendre dans la section « Bilbliographie« .
Cet article a été réalisé à l’aide d’un terminal d’Ubuntu 20.04 en CLI (Command Line Interface). Afin d’éviter de rencontrer quelconque problèmes, je vous conseille d’utiliser la même distribution ainsi que la même version.
Qu’est-ce que Bash ?
Bash (Bourne Again Shell) est un shell informatique qui a été développé à partir du shell original écrit par Steve Bourne. Il est principalement utilisé dans les systèmes d’exploitation Unix et Linux, bien qu’il soit également disponible sur d’autres systèmes d’exploitation tels que macOS et Windows.
Le shell est un programme qui s’exécute sur votre ordinateur et qui vous permet de saisir des commandes à l’aide de votre clavier. Lorsque vous saisissez une commande et appuyez sur « Entrée », le shell exécute la commande en utilisant le système d’exploitation. Cela peut donc être utile pour effectuer diverses tâches, telles que lister les fichiers et dossiers dans un répertoire, copier ou déplacer des fichiers, ou exécuter des programmes.
Ce langage est également utilisé pour écrire des scripts, qui sont des séries de commandes qui peuvent être exécutées automatiquement pour accomplir une tâche spécifique. C’est à dire que les scripts peuvent être utilisés pour automatiser des tâches répétitives, pour créer des interfaces utilisateur personnalisées, ou même pour créer de petits programmes.
Bash est un shell populaire car il est facile à utiliser et très puissant. Il offre une grande flexibilité et de nombreuses options de configuration, ce qui en fait un choix courant pour les utilisateurs de systèmes d’exploitation Unix et Linux. Si vous utilisez un de ces systèmes d’exploitation, il y a de fortes chances que vous utilisiez déjà Bash ou que vous ayez l’occasion de le faire à l’avenir.
Les bases
L’image ci-dessous, vous permet de voir quelques exemples de commandes exécutées dans mon terminal ainsi que ce qu’elles retournent.
- Pour afficher la liste des fichiers et dossiers dans le répertoire courant, saisissez la commande «
ls
» et appuyez sur « Entrée ». Vous pouvez également utiliser la commande «ls -l
» pour afficher la liste de manière plus détaillée. - Pour changer de répertoire, utilisez la commande «
cd
» suivie du nom du répertoire. Par exemple, la commande «cd Documents
» vous emmènera dans le répertoire « Documents ». Pour revenir au répertoire parent, utilisez la commande « cd .. ». - Pour créer un nouveau fichier, utilisez la commande «
touch
» suivie du nom du fichier. - Pour copier un fichier, utilisez la commande «
cp
» suivie du nom du fichier à copier et du nom de la copie. - Pour déplacer un fichier, utilisez la commande «
mv
» suivie du nom du fichier à déplacer et de sa nouvelle emplacement.
Ce sont quelques exemples de commandes de base que vous pouvez utiliser avec Bash. Il existe de nombreuses autres commandes et options que vous pouvez utiliser pour effectuer diverses tâches. Pour en savoir plus sur une commande en particulier, vous pouvez utiliser la commande « man » suivie du nom de la commande (par exemple, « man ls » pour afficher la documentation de la commande « ls »).
Variables
- Nommage : le nom de votre variable ne doit pas être le même que celui d’une commande ou d’une fonction existante. Vous pouvez utiliser des lettres, des chiffres et des underscores (_) dans le nom de votre variable, mais il ne doit pas commencer par un chiffre.
- En Bash, une variable peut contenir n’importe quelle chaîne de caractères, il est recommandé de toujours encadrer les valeurs de variables avec des guillemets lorsqu’elles sont utilisées dans des commandes ou des expressions. Cela pour éviter tout problème avec les espaces et les caractères spéciaux. Par exemple,
echo "$ma_variable"
est plus sûr queecho $ma_variable
. - Déclaration et affectation : pour déclarer une variable en Bash, il suffit de lui affecter une valeur. Par exemple,
ma_variable=foo
déclare la variablema_variable
et lui affecte la valeurfoo
. De ce fait si vous utilisez une variable avant de l’avoir déclarée, Bash la considérera comme une chaîne vide. - Les variables sont généralement locales au script ou au shell dans lequel elles sont déclarées. Si vous souhaitez rendre une variable globale, c’est-à-dire accessible partout dans votre script, vous pouvez la déclarer avec la commande
declare -g
ou l’exporter avec la commandeexport
. - Types : en Bash, il n’y a pas de type de données strict pour les variables. Cependant, vous pouvez utiliser des opérateurs de comparaison et des fonctions de test pour vérifier si une variable contient un nombre, une chaîne de caractères, etc.
Il est important de noter que les variables en Bash sont sensibles à la casse, c’est-à-dire que nom
et Nom
sont considérées comme deux variables différentes.
# Déclaration de la variable "nom" et affectation de la valeur "Alice"
nom="Alice"
# Affichage de la valeur de la variable "nom"
echo "Bonjour, $nom"
# Affichera "Bonjour, Alice"
# Affectation d'une nouvelle valeur à la variable "nom"
nom="Bob"
# Affichage de la nouvelle valeur de la variable "nom"
echo "Bonjour, $nom"
# Affichera "Bonjour, Bob"
Il est également possible de déclarer des variables d’environnement, qui sont accessibles dans tous les scripts et sous-processus lancés depuis le shell. Pour déclarer une variable d’environnement, il suffit de l’affecter avec la commande export
:
# Déclaration de la variable d'environnement "MA_VARIABLE" et affectation de la valeur "foo"
export MA_VARIABLE="foo"
Conditions
Voici quelques points à prendre en compte lorsque vous utilisez des conditions Bash:
- Utilisez toujours les opérateurs de comparaison et les opérateurs logiques de manière appropriée. Par exemple, utilisez « == » pour tester l’égalité et « && » pour le ET logique.
- Assurez-vous de mettre les conditions entre crochets « [] » et de les encadrer avec des espaces. Par exemple: « [ $a -gt 0 ] » est correct, tandis que « [$a-gt0] » n’est pas correct.
- Testez toujours vos conditions avant de les utiliser dans vos scripts. Cela vous permettra de vous assurer qu’elles fonctionnent comme prévu et de découvrir et de corriger toutes les erreurs.
- Soyez vigilant lorsque vous utilisez des variables dans vos conditions. Assurez-vous que les variables sont définies et ont des valeurs correctes avant de les utiliser dans vos conditions.
Voici un exemple de condition Bash simple qui vérifie si une variable numérique est supérieure à zéro:
if [ $num -gt 0 ]; then
echo "Le nombre est positif"
fi
Il existe de nombreux opérateurs de comparaison en Bash, comme -eq
pour tester l’égalité, -ne
pour tester l’inégalité, -gt
pour tester si un nombre est supérieur à un autre, -lt
pour tester si un nombre est inférieur à un autre, etc. Vous pouvez trouver la liste complète des opérateurs de comparaison dans la documentation de Bash.
Dans cet exemple, la condition « [ $num -gt 0 ] » vérifie si la variable numérique « num » est supérieure à zéro. Si c’est le cas, le script affiche le message « Le nombre est positif ».
Voici un autre exemple de condition qui vérifie si une chaîne de caractères est vide:
if [ -z "$string" ]; then
echo "La chaîne est vide"
fi
Voici quelques exemples qui vous permettront de mieux comprendre les conditions :
# Déclaration de la variable "x" et affectation de la valeur "5"
x=5
# Vérification de la valeur de "x" avec la structure "if"
if [ "$x" -gt "0" ]; then
# Si la condition est vraie, on exécute le code qui suit
echo "x est supérieur à 0"
fi
# Affichera "x est supérieur à 0"
# Vérification de la valeur de "x" avec la structure "if-else"
if [ "$x" -gt "10" ]; then
# Si la condition est vraie, on exécute le code qui suit
echo "x est supérieur à 10"
else
# Si la condition est fausse, on exécute le code qui suit
echo "x n'est pas supérieur à 10"
fi
# Affichera "x n'est pas supérieur à 10"
# Vérification de la valeur de "x" avec la structure "if-elif-else"
if [ "$x" -gt "10" ]; then
# Si la première condition est vraie, on exécute le code qui suit
echo "x est supérieur à 10"
elif [ "$x" -eq "5" ]; then
# Si la première condition est fausse mais que la seconde est vraie, on exécute le code qui suit
echo "x est égal à 5"
else
# Si aucune des conditions précédentes n'est vraie, on exécute le code qui suit
echo "x n'est ni supérieur à 10 ni égal à 5"
fi
# Affichera "x est égal à 5"
Boucles
Voici un exemple de boucle « for » simple en Bash qui affiche les nombres de 1 à 5:
#!/bin/bash
for i in 1 2 3 4 5; do
echo $i
done
Le code ci-dessus réalise les étapes ci-dessous:
- La boucle
for
parcourt une série de valeurs, dans ce cas, les nombres de 1 à 10. - La variable
$i
prend chaque valeur à tour de rôle pendant chaque itération de la boucle. - La commande
echo
imprime la valeur de$i
à chaque itération.
Voici un exemple de boucle while
en Bash :
#!/bin/bash
# Imprimer les nombres de 1 à 10
i=1
while [ $i -le 10 ]; do
echo $i
i=$((i+1))
done
Voici donc comment cela fonctionne :
- La boucle
while
répète une action tant qu’une condition est vraie. Dans ce cas, la condition est$i -le 10
, ce qui signifie que la boucle s’exécutera tant que$i
est inférieur ou égal à 10. - La variable
$i
est initialisée à 1 avant le début de la boucle. - La commande
echo
imprime la valeur de$i
à chaque itération de la boucle. - La variable
$i
est incrémentée de 1 à chaque itération de la boucle aveci=$((i+1))
. - Quand
$i
atteint 11, la condition$i -le 10
devient fausse et la boucle s’arrête.
Fonctions
Voici quelques points à prendre en compte lors de la création et de l’utilisation de fonctions en Bash :
- Nommage : le nom de votre fonction ne doit pas être le même que celui d’une commande ou d’une autre fonction existante. Vous pouvez utiliser des lettres, des chiffres et des underscores (_) dans le nom de votre fonction, mais il ne doit pas commencer par un chiffre.
- Arguments : vous pouvez définir des arguments pour votre fonction en les mettant entre parenthèses lors de sa déclaration. Par exemple,
function ma_fonction { ... }
déclare une fonction sans arguments, tandis quefunction ma_fonction { ($1) ($2) ... }
déclare une fonction avec un ou plusieurs arguments. Pour accéder aux arguments dans votre code de fonction, vous pouvez utiliser les variables$1
,$2
, etc. - Valeur de retour : une fonction en Bash peut renvoyer une valeur à l’aide de la commande
return
. Cette valeur peut être un nombre ou une chaîne de caractères. Par exemple,return 0
renvoie la valeur 0, qui est généralement utilisée pour indiquer que la fonction s’est exécutée avec succès. - Portée des variables : les variables déclarées dans une fonction sont généralement locales à cette fonction et ne sont pas accessibles en dehors de celle-ci. Si vous souhaitez rendre une variable globale, c’est-à-dire accessible partout dans votre script, vous pouvez la déclarer avec la commande
declare -g
ou l’exporter avec la commandeexport
. - Erreurs : il est recommandé de vérifier les erreurs dans votre code de fonction et de gérer les erreurs potentielles avec la structure
if-else
ou la commandeset -e
(qui permet de quitter le script en cas d’erreur).
Prenons comme un exemple, une fonction plutôt simpliste qui permet de saluer une personne dont on passe en paramètre à la fonction son nom :
# Cette fonction s'appelle "saluer" et prend un seul argument, $1, qui est le nom de la personne à saluer
function saluer() {
echo "Bonjour, $1"
}
# On peut maintenant utiliser la fonction "saluer" comme ceci :
saluer "Alice"
# Affichera "Bonjour, Alice"
Voici un autre exemple de fonction qui calcule le carré d'un nombre :
function carre {
resultat=$(( $1 * $1 ))
echo "$resultat"
}
# On peut maintenant utiliser la fonction "carre" comme ceci :
carre 4
# Affichera "16"
Mon premier script
Nous allons créer ensemble, votre premier script en Bash en utilisant les différentes notions vues précédemment !
La première étape est la création du fichier qui va contenir notre code :
touch mon-premier-script.sh
Pour modifier un fichier, vous pouvez utiliser la commande nano :
nano mon-premier-script.sh
Suite à la cela, la première ligne de notre programme servira à indiquer sa portabilité par rapport aux différents shells disponibles, dans notre cas, nous utiliserons bash :
#!/bin/bash
Nous allons créer un script qui nous retournera si la ville que nous spécifions fait partie des grandes villes de France :
#!/bin/bash
function grandeVilleFrance() {
# echo -n permet de ne pas mettre de saut de ligne à la fin lors de l'éxécution
echo -n "Dans quelle ville habitez-vous ? ";
grandesVilles="Paris Strasbourg Tours Nantes";
read villeSaisie;
echo "Vous avez saisi ${villeSaisie}.";
for ville in ${grandesVilles};
do
if [ "${ville}" == "${villeSaisie}" ];
then
echo "Vous habitez dans une grande ville !";
exit;
fi
done;
echo "Vous n'habitez pas dans une grande ville...";
}
# Il est nécessaire d'appeler la fonction afin de l'exécuter
grandeVilleFrance;
La dernière étape avant de lancer notre script et de le rendre exécutable :
chmod +x mon-premier-script.sh
Si vous ne faites pas l’étape précédente, vous obtiendrez l’erreur suivante :
Procédons à l’exécution de notre script !
Lors de l’exécution, le programme nous demande de saisir une ville. Une fois saisie et validé, il s’occupe de vérifier si la ville fait partie du table de grandes villes que nous avons définis dans notre fonction. En fonction de s’il est présent ou non : il nous retourne une réponse différente.
Approfondir mes connaissances
Afin d’approfondir vos connaissances, je ne peux que vous conseillez de consulter les liens ci-dessous :
- Playlist de vidéos d’Algomius accessible ici.
- Interpréteur de commandes Bash en ligne accessible ici.
- Pourquoi tu *dois* apprendre le BASH – Christophe Casalegno, accessible ici.
- BASH: Des scripts solides – cocadmin, accessible ici.
- Je corrige les scripts d’Ubuntu – Conseils et bonnes pratiques en BASH – cocadmin, accessible ici.
- Apprendre à scripter sur GNU/Linux – notamax, accessible ici.