Ce tutoriel traite de la façon dont vous pouvez facilement écrire vos propres scripts Bash sur Linux.

En tant qu’administrateur système, il est fort probable que vous effectuiez des tâches répétitives qui pourraient être automatisées.

Heureusement pour vous, il existe un langage de programmation qui peut être utilisé sur Linux afin d’écrire des scripts : le langage de programmation Bash.

En utilisant Bash, vous pouvez planifier des sauvegardes de systèmes entiers en spécifiant autant de commandes que vous le souhaitez dans les scripts Bash.

Vous pouvez également avoir des scripts personnalisés qui créent et suppriment des utilisateurs et suppriment leurs fichiers associés.

Avec Bash, vous pouvez également avoir des scripts qui s’exécutent et déversent des mesures de performance utiles dans un fichier ou une base de données.

Bash est un langage de programmation très puissant pour les administrateurs système.

Dans le tutoriel d’aujourd’hui, nous allons apprendre toutes les bases qu’il y a à connaître sur Bash : comment créer et exécuter des scripts, comment utiliser efficacement les variables et les built-ins du shell.

Table des matières

Ce que vous allez apprendre

Si vous lisez ce tutoriel jusqu’à la fin, vous allez apprendre les concepts suivants concernant Bash

  • Comment créer et exécuter des scripts Bash en utilisant la ligne de commande;
  • Ce qu’est shebang et comment il est utilisé par Linux pour les scripts ;
  • Ce que sont les built-ins de l’interpréteur de commandes et comment ils diffèrent des programmes réguliers du système;
  • Comment utiliser les variables Bash et ce que sont les variables spéciales;
  • Comment utiliser la substitution de commandes Bash ;
  • Comment utiliser les instructions IF simples sur Bash;

Comme vous pouvez le voir, c’est un programme assez long, donc sans plus attendre, commençons par voir comment vous pouvez créer et exécuter des scripts Bash.

Démarrer avec Bash

Avant d’émettre toute commande, disons un mot rapide sur l’histoire commune de Bash et du Shell.

Histoire de Bash

La première version du shell Bash a été publiée en 1989 par Brian Fox et il se présente comme une implémentation open-source du shell Unix.

À l’époque, lorsque les systèmes Unix ont commencé à surgir, ces systèmes utilisaient des shells Unix standard nommés Bourne.

Image de LinuxJournal

Au début d’Unix, les systèmes développés par des sociétés telles que le MIT ou Bell Labs n’étaient pas libres et ils n’étaient pas open-source.

Même si une documentation était fournie pour ces outils, il est devenu prioritaire pour l’initiative GNU (dirigée par Richard Stallman) d’avoir sa propre version du Shell Unix.

Six ans après l’annonce du projet GNU, le shell Bash (Bourne-Again Shell) est né avec encore plus de fonctionnalités que le shell Bourne original.

Langage de programmation Bash

Lorsque l’on travaille avec un système de type Unix comme Linux, Bash a généralement deux significations :

  • Bash est un interpréteur de ligne de commande ou en d’autres termes un shell Unix. Cela signifie que chaque fois que vous ouvrez un terminal, vous serez face à un shell Unix qui est la plupart du temps un shell Bash.

Lorsque l’on tape des commandes directement dans le terminal, les commandes sont interprétées par le shell, exécutées en utilisant des appels système et les valeurs de retour sont données à l’utilisateur final.

Si vous n’êtes pas sûr de l’interpréteur actuel que vous utilisez, la variable d’environnement SHELL indique quel interpréteur vous utilisez actuellement.

$ printenv SHELL

Comme vous pouvez le voir, dans ce cas, nous utilisons correctement l’interpréteur de commandes Bash pour travailler.

Il est important de noter que même si des termes comme « Bash scripting » et « Shell scripting » sont utilisés de manière interchangeable, ils pourraient ne pas décrire réellement la même chose en fonction de votre distribution.

Certaines distributions récentes (comme Debian 10) ont des liens symboliques depuis le shell Bourne original (nommé sh) vers leurs propres implémentations de shell (dans ce cas, Dash ou le shell Almquist de Debian)

  • Bash décrit également un langage de ligne de commande et il est aussi appelé le langage Bash. Bash expose un ensemble d’opérateurs et d’opérandes qui peuvent être utilisés afin d’avoir certaines fonctionnalités de base comme le piping ou l’exécution de plusieurs commandes à la fois.

Lorsque vous exécutez quelques piping de base, vous avez l’habitude de travailler avec le symbole « | ». Ce symbole fait partie du langage de ligne de commande Bash.

La même logique s’applique au symbole « && » qui exécute la deuxième commande si, et seulement si, la première commande a réussi.

$ command1 && command2

Créer et exécuter des scripts Bash

Maintenant que vous avez quelques notions sur le shell Bash et le langage de ligne de commande Bash, commençons par créer et exécuter des scripts Bash simples.

Pour créer votre premier script Bash, créez simplement un fichier nommé « script.sh ».

Comme vous l’avez probablement déjà remarqué, nous utilisons toujours l’extension « sh » en référence au shell Bourne original (également dénoté sh).

$ touch script.sh

Maintenant, créer un fichier se terminant par l’extension « sh » n’est pas suffisant pour que votre script soit considéré comme un script Shell.

Vous pouvez effectivement voir que votre fichier n’est pas encore considéré comme un script Shell en exécutant la commande file.

$ file script.sh

Comme vous pouvez le voir ici, votre fichier n’est décrit que comme un simple fichier vide.

Pour que votre fichier soit décrit comme un fichier de script shell, vous devez spécifier la ligne shebang en haut de votre fichier.

Spécifier le shell en utilisant shebang

Si vous utilisez Linux depuis un certain temps, il est très probable que vous ayez déjà rencontré la ligne shebang au début de votre fichier.

Shebang, abréviation de « Hash + « Bang », est une ligne unique placée au début des scripts shell afin de spécifier quel shell doit être utilisé pour interpréter ce script.

#!/bin/<shell>

Dans notre cas, nous voulons travailler avec des scripts Bash. En d’autres termes, nous voulons que nos scripts soient interprétés par un interpréteur Bash.

Afin de déterminer le chemin d’accès à l’interpréteur, vous pouvez utiliser la commande « which ».

$ which bash/bin/bash

Maintenant que vous connaissez le chemin d’accès à votre interpréteur, éditez votre fichier de script et ajoutez la ligne shebang en haut de votre fichier.

#!/bin/bash

Maintenant que vous avez ajouté cette ligne au début de votre fichier, ré-exécutez la commande « file » afin de voir la différence.

Comme vous pouvez le voir, la sortie est légèrement différente : cette fois, votre script est vu comme un « script shell Bourne-Again » et surtout comme un exécutable.

Alors, que se passerait-il si vous ne spécifiez pas la ligne shebang en haut du script.

Lorsque vous ne spécifiez pas la ligne shebang, le script est exécuté en utilisant le shell actuel utilisé afin de lancer la commande execute.

Maintenant que vous savez comment créer des scripts Bash, voyons comment vous pouvez les exécuter.

Exécuter des scripts Bash

Pour exécuter des scripts Bash sur Linux, vous avez essentiellement deux options :

  • En spécifiant l’interpréteur de shell que vous voulez utiliser et le fichier de script ;
  • En utilisant le chemin d’accès au fichier de script

Spécifier l’interpréteur de shell

La première méthode est assez simple.

Pour exécuter votre script bash, vous allez spécifier vous-même l’interpréteur que vous souhaitez utiliser.

$ bash <script>$ /bin/bash <script>

En reprenant l’exemple que nous avons utilisé précédemment, cela nous donnerait la sortie suivante.

Comme vous pouvez le voir, cette méthode ne nécessite même pas les permissions d’exécution sur le fichier, il suffit de pouvoir utiliser l’exécutable bash.

Comme vous pouvez le voir, lorsque je suis connecté en tant qu’autre utilisateur, sans droits d’exécution, je suis toujours capable d’exécuter ce script.

C’est une remarque importante car vous pourriez vouloir stocker vos fichiers de script dans des répertoires protégés (auxquels vous seul pouvez accéder) afin d’empêcher les autres utilisateurs d’exécuter vos fichiers.

Spécifier le chemin d’accès au script

L’autre façon d’exécuter des scripts bash est de spécifier le chemin d’accès au fichier.

Pour utiliser cette méthode, le fichier doit avoir des autorisations d’exécution.

D’abord, utilisez la commande « chmod » afin de définir les autorisations d’exécution pour l’utilisateur actuel.

$ chmod u+x <script>

Comme vous pouvez le voir, la couleur du fichier est assez différente : votre terminal actuel met en évidence les fichiers exécutables en utilisant des couleurs spécifiques, dans ce cas la couleur verte.

Maintenant que votre script est exécutable, vous pouvez l’exécuter en spécifiant le chemin relatif ou absolu du script.

En utilisant un fichier nommé « script.sh » situé dans mon répertoire de travail actuel, le script peut être exécuté en exécutant

$ ./script.sh

Si vous êtes dans un autre répertoire, vous devrez spécifier le chemin absolu vers le fichier du script.

$ /home/user/script.sh

Comme vous l’avez probablement compris maintenant, cette méthode n’est pas très pratique si vous devez spécifier le chemin du script à chaque fois.

Heureusement pour vous, il existe un moyen d’exécuter votre script en tapant simplement le nom du fichier dans la ligne de commande.

Ajouter le script à PATH

L’extension « .sh » n’est pas nécessaire pour qu’un script soit considéré comme un fichier de script.

Pour simplifier, nous allons renommer le fichier existant « script.sh » existant en « script ».

Pour renommer des fichiers sous Linux, il suffit d’utiliser la commande « mv » et de spécifier les cibles source et destination.

$ mv script.sh script

Maintenant, et si vous vouliez exécuter votre script en tapant « script » ?

Pour cela, vous devez ajouter le chemin de votre script à votre variable d’environnement PATH.

Pour imprimer la valeur actuelle de votre variable d’environnement PATH, utilisez « printenv » avec l’argument « PATH ».

$ printenv PATH

Pour mettre à jour le PATH dans votre environnement de travail actuel, modifiez la variable d’environnement PATH en utilisant la syntaxe suivante.

$ export PATH="<path_to_script>:$PATH"

Maintenant, la commande « script » que vous venez de définir sera directement disponible sans spécifier de chemin : vous pouvez la lancer comme n’importe quelle autre commande.

Note : si vous voulez rendre vos changements permanents, suivez ces étapes pour mettre à jour correctement votre variable PATH.

Les built-ins shell expliqués

Avant de déclarer des variables dans votre script shell, il est important que vous connaissiez les built-ins shell.

Lorsque vous travaillez avec le shell Bash, vous exécutez la plupart du temps des « programmes ».

Des exemples de programmes sont « ls », « fdisk » ou « mkdir ». L’aide pour ces commandes peut être trouvée en utilisant la commande « man » abréviation de « manual ».

Mais avez-vous déjà essayé de lire la documentation de la commande « source » ?

Vous ne pourriez pas lire la documentation en utilisant « man » parce que la commande « source » est une fonction intégrée à l’interpréteur de commandes.

Pour lire la documentation des fonctions intégrées à l’interpréteur de commandes, vous devez utiliser la commande « help ».

$ help <command>

La liste des shell built-ins est assez étendue mais voici une capture d’écran de chaque commande intégrée à bash que vous pouvez trouver sur les systèmes Ubuntu.

Utiliser les variables Bash

Maintenant que vous connaissez les built-ins Bash, il est temps pour vous de commencer à écrire vos propres scripts Bash.

Pour rappel, les commandes tapées dans votre terminal peuvent être utilisées dans un script Bash exactement de la même manière.

Par exemple, si vous voulez un script qui exécute simplement la commande « ls -l », il suffit de modifier votre script, d’ajouter la ligne shebang et la commande.

#!/bin/bash# This simple script executes the ls commandls -l

Maintenant, et si vous vouliez avoir des variables Bash ?

Les variables Bash sont des variables de programme simples qui peuvent stocker une grande variété d’entrées différentes.

Pour déclarer une variable Bash, il suffit de spécifier le nom de la variable et sa valeur séparés par un signe égal.

VAR=value

Pour pouvoir utiliser le contenu de votre variable Bash dans votre script, utilisez « $ » et ajoutez le nom de votre variable.

echo $VAR

Même si vous pouvez utiliser cette syntaxe afin d’avoir la valeur de la variable, vous pouvez également utiliser la notation « parenthèses ».

echo ${VAR}

En utilisant cette syntaxe, les variables peuvent être combinées ensemble.

Si vous avez deux variables Bash nommées VAR1 et VAR2 par exemple, vous pouvez les faire imprimer toutes les deux en utilisant la syntaxe suivante

echo "${VAR1}${VAR2}"

Exécution de commandes dans des scripts

Pour exécuter des commandes à l’intérieur de scripts Bash, vous devez utiliser la substitution de commande.

La substitution de commande est une technique utilisée dans les shells Bash afin de stocker le résultat d’une commande dans une variable.

Pour substituer une commande dans Bash, utilisez le signe dollar et mettez votre commande entre parenthèses.

VAR=$(command)

Par exemple, afin d’obtenir le résultat des nombres de fichiers dans votre répertoire actuel, vous écrirez

#!/bin/bashNUMBER=$(ls -l | wc -l)echo "${NUMBER} files in this directory!"

Comme vous pouvez le voir, la substitution de commande est assez pratique car elle peut être utilisée pour exécuter dynamiquement des commandes dans un script shell et renvoyer la valeur à l’utilisateur.

En parlant du retour des résultats à l’utilisateur final, comment gérez-vous les scripts qui ne se terminent pas correctement ?

Que faire si une commande à l’intérieur du script ne s’est pas exécutée correctement ?

Comprendre les statuts de sortie

Lorsque vous exécutez un script, même si vous ne renvoyez pas de valeur, le script renvoie toujours ce que nous appelons « un statut de sortie ».

Un statut de sortie dans le script Bash indique si l’exécution du script a réussi ou non.

Si le code de statut est zéro, l’exécution de votre script a réussi. Cependant, si la valeur est différente de zéro (disons un, deux ou plus), cela indique que l’exécution du script n’a pas réussi.

Pour démontrer l’état de sortie, exécutez n’importe quelle commande valide dans votre shell bash.

echo "This is a simple working command"

Maintenant, utilisez cette commande afin d’inspecter le statut de sortie de la dernière commande exécutée.

echo ${?}

Comme vous pouvez le voir, la sortie de cette commande est « 0 » ou le statut de sortie de la dernière commande que j’ai exécutée.

Cette syntaxe (« ${?} ») peut être utilisée dans les scripts afin de s’assurer que les commandes se sont exécutées correctement.

Le statut de sortie peut être utilisé dans les scripts afin de quitter le script avec un code de statut spécifique.

Par exemple, si vous voulez quitter le script avec une erreur, vous pouvez utiliser la commande suivante dans votre script.

exit 1

De même, vous pouvez utiliser le code de sortie « zéro » afin de spécifier que le script s’est exécuté avec succès.

exit 0

Pour vérifier si le code d’état était correct, vous allez avoir besoin d’instructions conditionnelles de base comme l’instruction IF.

Manipulation des conditions dans Bash

Parfois, l’exécution de scripts bash ne consiste pas seulement à avoir plusieurs commandes les unes à côté des autres : vous voulez avoir des actions conditionnelles.

Dans certains cas, il peut être pratique d’avoir une condition vérifiant si l’utilisateur actuel est l’utilisateur root (ou juste un utilisateur spécifique sur votre système).

Une façon simple d’avoir des conditions dans Bash est d’utiliser l’instruction if.

« If » est intégré au shell, en conséquence, le manuel est disponible via la commande « help »

$ help if

La page d’aide décrit la syntaxe de la commande if en utilisant des points-virgules, mais nous allons utiliser cette syntaxe (qui est équivalente)

if ]then <commands>else <command>fi

Cas pratique : vérifier si l’utilisateur est root

Afin de montrer à quoi peut servir l’instruction if, nous allons écrire un script simple vérifiant si un utilisateur si l’utilisateur root ou non.

Pour rappel, l’utilisateur root a toujours l’UID mis à zéro sur tout système Unix.

Connaissant cette information, nous allons vérifier si l’UID est mis à zéro, si c’est le cas, nous allons exécuter le reste du script, sinon nous allons quitter le script.

Comme expliqué dans d’autres tutoriels (sur l’administration des utilisateurs), vous pouvez obtenir l’ID de l’utilisateur actuel en utilisant la commande « id ».

$ id -u1000

Nous allons utiliser cette commande afin de vérifier si l’utilisateur qui exécute le script est root ou non.

Créer un nouveau script et y ajouter la ligne shebang.

#!/bin/bash

Directement en dessous, ajouter la commande « id » et stocker le résultat dans une variable nommée « USERID » en utilisant la substitution de commande.

USERID=$(id -u)

Maintenant que la variable « USERID » contient l’ID de l’utilisateur actuel, utilisez une instruction IF afin de vérifier si l’ID de l’utilisateur est nul ou non.

Si c’est le cas, écrivez un simple message d’information, sinon sortez du script avec un statut de sortie de 1.

if ]then echo "This is root"else exit 1fi

Maintenant si vous exécutez le script en tant que votre utilisateur actuel, le script sortira simplement avec un statut de sortie de un.

Maintenant, essayez d’exécuter le script en tant qu’utilisateur root (avec la commande sudo)

Comme vous pouvez le voir, votre message d’information a été affiché et le script est sorti avec un code d’erreur de zéro.

Conclusion

Dans ce tutoriel, vous avez appris le langage de programmation Bash et comment il peut être utilisé afin de créer des scripts Bash sur votre système.

Vous avez également appris les statuts de sortie et les déclarations conditionnelles qui sont clés afin d’avoir une logique personnalisée définie dans vos scripts.

Maintenant que vous avez plus de connaissances sur Bash, vous devriez commencer par écrire vos propres scripts pour vos besoins : vous pouvez commencer par avoir un tutoriel sur la création de fichiers de sauvegarde d’archives par exemple.

Si vous êtes intéressé par l’administration du système Linux, nous avons une section complète dédiée à cela sur le site web, alors assurez-vous de la consulter !

.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.