Article original : Shell Scripting for Beginners – How to Write Bash Scripts in Linux

Le scripting shell est un élément important de l'automatisation des processus sous Linux. Le scripting vous aide à écrire une séquence de commandes dans un fichier puis à les exécuter.

Cela vous fait gagner du temps car vous n'avez pas à écrire certaines commandes à plusieurs reprises. Vous pouvez effectuer des tâches quotidiennes efficacement et même les planifier pour une exécution automatique.

Vous pouvez également configurer certains scripts pour qu'ils s'exécutent au démarrage, par exemple pour afficher un message particulier lors du lancement d'une nouvelle session ou pour définir certaines variables d'environnement.

Les applications et les utilisations du scripting sont nombreuses, alors plongeons dans le vif du sujet.

Dans cet article, vous apprendrez :

  1. Qu'est-ce qu'un shell bash ?

  2. Qu'est-ce qu'un script bash et comment l'identifier ?

  3. Comment créer votre premier script bash et l'exécuter.

  4. La syntaxe de base du scripting shell.

  5. Comment voir les scripts planifiés d'un système.

  6. Comment automatiser des scripts en les planifiant via des tâches cron.

La meilleure façon d'apprendre est de pratiquer. Je vous encourage vivement à suivre en utilisant Replit. Vous pouvez accéder à un shell Linux fonctionnel en quelques minutes.

Introduction au Shell Bash

La ligne de commande Linux est fournie par un programme appelé le shell. Au fil des ans, le programme shell a évolué pour proposer diverses options.

Différents utilisateurs peuvent être configurés pour utiliser différents shells. Mais la plupart des utilisateurs préfèrent s'en tenir au shell par défaut actuel. Le shell par défaut pour de nombreuses distributions Linux est le GNU Bourne-Again Shell (bash). Bash a succédé au shell Bourne (sh).

Lorsque vous lancez le shell pour la première fois, il utilise un script de démarrage situé dans le fichier .bashrc ou .bash_profile qui vous permet de personnaliser le comportement du shell.

Lorsqu'un shell est utilisé de manière interactive, il affiche un $ lorsqu'il attend une commande de l'utilisateur. C'est ce qu'on appelle l'invite du shell (shell prompt).

[username@host ~]$

Si le shell s'exécute en tant que root, l'invite est changée en #. L'invite du shell du superutilisateur ressemble à ceci :

[root@host ~]#

Bash est très puissant car il peut simplifier certaines opérations difficiles à accomplir efficacement avec une interface graphique (GUI). N'oubliez pas que la plupart des serveurs n'ont pas de GUI, et il est préférable d'apprendre à utiliser les pouvoirs d'une interface de ligne de commande (CLI).

Qu'est-ce qu'un Script Bash ?

Un script bash est une série de commandes écrites dans un fichier. Celles-ci sont lues et exécutées par le programme bash. Le programme s'exécute ligne par ligne.

Par exemple, vous pouvez naviguer vers un certain chemin, créer un dossier et lancer un processus à l'intérieur en utilisant la ligne de commande.

Vous pouvez effectuer la même séquence d'étapes en enregistrant les commandes dans un script bash et en l'exécutant. Vous pouvez exécuter le script autant de fois que vous le souhaitez.

Comment Identifier un Script Bash ?

Extension de fichier en .sh.

Par convention de nommage, les scripts bash se terminent par un .sh. Cependant, les scripts bash peuvent parfaitement s'exécuter sans l'extension sh.

Les scripts commencent par un bash bang.

Les scripts sont également identifiés par un shebang. Le shebang est une combinaison de bash # et bang ! suivie du chemin du shell bash. C'est la première ligne du script. Le shebang indique au shell de l'exécuter via le shell bash. Le shebang est simplement un chemin absolu vers l'interpréteur bash.

Voici un exemple de l'instruction shebang.

#! /bin/bash

Le chemin du programme bash peut varier. Nous verrons plus tard comment l'identifier.

Droits d'exécution

Les scripts ont des droits d'exécution pour l'utilisateur qui les exécute.

Un droit d'exécution est représenté par x. Dans l'exemple ci-dessous, mon utilisateur a les droits rwx (lecture, écriture, exécution) pour le fichier test_script.sh

Image

Couleur du fichier

Les scripts exécutables apparaissent dans une couleur différente du reste des fichiers et dossiers.

Dans mon cas, les scripts avec des droits d'exécution apparaissent en vert.

Image

Comment Créer votre Premier Script Bash

Créons un script simple en bash qui affiche Hello World.

Créer un fichier nommé hello_world.sh

touch hello_world.sh

Trouver le chemin de votre shell bash.

which bash

Image

Dans mon cas, le chemin est /usr/bin/bash et je l'inclurai dans le shebang.

Écrire la commande.

Nous allons utiliser echo pour afficher "hello world" dans la console.

Notre script ressemblera à ceci :

#! /usr/bin/bash
echo "Hello World"

Modifiez le fichier hello_world.sh à l'aide d'un éditeur de texte de votre choix et ajoutez-y les lignes ci-dessus.

Donner les droits d'exécution à votre utilisateur.

Modifiez les permissions du fichier et autorisez l'exécution du script en utilisant la commande ci-dessous :

chmod u+x hello_world.sh

chmod modifie les droits existants d'un fichier pour un utilisateur particulier. Nous ajoutons +x à l'utilisateur u.

Exécuter le script.

Vous pouvez exécuter le script des manières suivantes :

./hello_world.sh

bash hello_world.sh.

Voici le résultat :

Deux façons d'exécuter des scripts

Deux façons d'exécuter des scripts

La Syntaxe de Base du Scripting Bash

Comme tout autre langage de programmation, le scripting bash suit un ensemble de règles pour créer des programmes compréhensibles par l'ordinateur. Dans cette section, nous allons étudier la syntaxe du scripting bash.

Comment définir des variables

Nous pouvons définir une variable en utilisant la syntaxe nom_variable=valeur. Pour obtenir la valeur de la variable, ajoutez $ avant la variable.

#!/bin/bash
# Un exemple simple de variable
greeting=Hello
name=Tux
echo $greeting $name

Image

Tux est aussi le nom de la mascotte de Linux, le manchot.

Salut, je suis Tux.

Salut, je suis Tux.

Expressions Arithmétiques

Voici les opérateurs supportés par bash pour les calculs mathématiques :

OpérateurUtilisation
+addition
-soustraction
*multiplication
/division
**exponentiation
%modulo

Voyons quelques exemples.

Notez les espaces, ils font partie de la syntaxe

Notez les espaces, ils font partie de la syntaxe

Les expressions numériques peuvent également être calculées et stockées dans une variable en utilisant la syntaxe ci-dessous :

var=$((expression))

Essayons un exemple.

#!/bin/bash

var=$((3+9))
echo $var

Image

Les fractions ne sont pas calculées correctement avec les méthodes ci-dessus et sont tronquées.

Pour les calculs décimaux, nous pouvons utiliser la commande bc pour obtenir le résultat avec un nombre particulier de décimales. bc (Bash Calculator) est une calculatrice en ligne de commande qui prend en charge les calculs jusqu'à un certain nombre de points décimaux.

echo "scale=2;22/7" | bc

scale définit le nombre de décimales requises dans le résultat.

Obtenir un résultat avec 2 décimales

Obtenir un résultat avec 2 décimales

Comment lire les entrées de l'utilisateur

Parfois, vous aurez besoin de recueillir les entrées de l'utilisateur et d'effectuer les opérations correspondantes.

En bash, nous pouvons récupérer l'entrée de l'utilisateur en utilisant la commande read.

read nom_variable

Pour inviter l'utilisateur avec un message personnalisé, utilisez le drapeau -p.

read -p "Entrez votre âge" nom_variable

Exemple :

#!/bin/bash

echo "Entrez un nombre"
read a

echo "Entrez un nombre"
read b

var=$((a+b))
echo $var

Image

Opérateurs logiques de comparaison numérique

La comparaison est utilisée pour vérifier si des instructions sont évaluées à vrai (true) ou faux (false). Nous pouvons utiliser les opérateurs présentés ci-dessous pour comparer deux instructions :

OpérationSyntaxeExplication
Égaliténum1 -eq num2num1 est-il égal à num2
Supérieur ou égal ànum1 -ge num2num1 est-il supérieur ou égal à num2
Supérieur ànum1 -gt num2num1 est-il supérieur à num2
Inférieur ou égal ànum1 -le num2num1 est-il inférieur ou égal à num2
Inférieur ànum1 -lt num2num1 est-il inférieur à num2
Non Égal ànum1 -ne num2num1 est-il différent de num2

Syntaxe :

if [ conditions ]
    then
         commands
fi

Exemple :

Comparons deux nombres et trouvons leur relation :

read x
read y

if [ $x -gt $y ]
then
echo X est plus grand que Y
elif [ $x -lt $y ]
then
echo X est plus petit que Y
elif [ $x -eq $y ]
then
echo X est égal à Y
fi

Résultat :

Image

Instructions Conditionnelles (Prise de Décision)

Les conditions sont des expressions qui s'évaluent en un booléen (true ou false). Pour vérifier les conditions, nous pouvons utiliser if, if-else, if-elif-else et des conditions imbriquées.

La structure des instructions conditionnelles est la suivante :

  • instructions if...then...fi

  • instructions if...then...else...fi

  • instructions if..elif..else..fi

  • instructions if..then..else..if..then..fi..fi.. (Conditions imbriquées)

Syntaxe :

if [[ condition ]]
then
    statement
elif [[ condition ]]; then
    statement 
else
    do this by default
fi

Pour créer des comparaisons significatives, nous pouvons également utiliser AND -a et OR -o.

L'instruction ci-dessous se traduit par : Si a est supérieur à 40 et b est inférieur à 6.

if [ $a -gt 40 -a $b -lt 6 ]

Exemple : Trouvons le type de triangle en lisant les longueurs de ses côtés.

read a
read b
read c

if [ $a == $b -a $b == $c -a $a == $c ]
then
echo EQUILATERAL

elif [ $a == $b -o $b == $c -o $a == $c ]
then 
echo ISOSCELE
else
echo SCALENE

fi

Résultat :

Cas de test #1

Image

Cas de test #2

Image

Cas de test #3

Image

Boucles et sauts

Les boucles For vous permettent d'exécuter des instructions un nombre spécifique de fois.

Boucler avec des nombres :

Dans l'exemple ci-dessous, la boucle itérera 5 fois.

#!/bin/bash

for i in {1..5}
do
    echo $i
done

Image

Boucler avec des chaînes de caractères :

Nous pouvons également boucler à travers des chaînes.

#!/bin/bash

for X in cyan magenta yellow  
do
    echo $X
done

Image

Boucle While

Les boucles While vérifient une condition et bouclent tant que la condition reste vraie. Nous devons fournir une instruction de compteur qui incrémente le compteur pour contrôler l'exécution de la boucle.

Dans l'exemple ci-dessous, (( i += 1 )) est l'instruction de compteur qui incrémente la valeur de i.

Exemple :

#!/bin/bash
i=1
while [[ $i -le 10 ]] ; do
   echo "$i"
  (( i += 1 ))
done

Image

Lecture de fichiers

Supposons que nous ayons un fichier sample_file.txt comme illustré ci-dessous :

Image

Nous pouvons lire le fichier ligne par ligne et afficher le résultat à l'écran.

#!/bin/bash

LINE=1

while read -r CURRENT_LINE
    do
        echo "$LINE: $CURRENT_LINE"
    ((LINE++))
done < "sample_file.txt"

Résultat :

Lignes imprimées avec numéro de ligne

Lignes imprimées avec numéro de ligne

Comment exécuter des commandes avec des accents graves (backticks)

Si vous devez inclure la sortie d'une commande complexe dans votre script, vous pouvez écrire l'instruction à l'intérieur d'accents graves.

Syntaxe :

var= commandes

Exemple : Supposons que nous voulions obtenir la liste des points de montage contenant tmpfs dans leur nom. Nous pouvons formuler une instruction comme celle-ci : df -h | grep tmpfs.

Pour l'inclure dans le script bash, nous pouvons l'entourer d'accents graves.

#!/bin/bash

var=`df -h | grep tmpfs`
echo $var

Résultat :

Image

Comment obtenir des arguments pour les scripts depuis la ligne de commande

Il est possible de donner des arguments au script lors de l'exécution.

$@ représente la position des paramètres, en commençant par un.

#!/bin/bash

for x in $@
do
    echo "L'argument saisi est $x"
done

Exécutez-le comme ceci :

./script arg1 arg2

Image

Comment Automatiser des Scripts en les Planifiant via des Tâches Cron

Cron est un utilitaire de planification de tâches présent dans les systèmes de type Unix. Vous pouvez planifier des tâches pour qu'elles s'exécutent quotidiennement, hebdomadairement, mensuellement ou à une heure précise de la journée. L'automatisation sous Linux repose largement sur les tâches cron.

Voici la syntaxe pour planifier des crons :

# Exemple de tâche cron
* * * * * sh /chemin/vers/script.sh

Ici, * représente respectivement minute(s) heure(s) jour(s) mois jour(s) de la semaine.

Voici quelques exemples de planification de tâches cron.

PLANIFICATIONVALEUR PLANIFIÉE
5 0 * 8 *À 00h05 en août.
5 4 * * 6À 04h05 le samedi.
0 22 * * 1-5À 22h00 tous les jours de la semaine du lundi au vendredi.

Vous pouvez en apprendre plus sur cron en détail dans ce billet de blog.

Comment Vérifier les Scripts Existants sur un Système

Utiliser crontab

crontab -l liste les scripts déjà planifiés pour un utilisateur particulier.

Mes scripts planifiés

Mes scripts planifiés

Utiliser la commande find

La commande find aide à localiser des fichiers basés sur certains motifs. Comme la plupart des scripts se terminent par .sh, nous pouvons utiliser la commande find comme ceci :

find . -type f -name "*.sh"

Où,

  • . représente le répertoire courant. Vous pouvez modifier le chemin en conséquence.

  • -type f indique que le type de fichier que nous recherchons est un fichier texte.

  • *.sh demande de faire correspondre tous les fichiers se terminant par .sh.

Image

Si vous souhaitez lire des informations détaillées sur la commande find, consultez mon autre article.

Conclusion

Dans ce tutoriel, nous avons appris les bases du scripting shell. Nous avons examiné des exemples et une syntaxe qui peuvent nous aider à écrire des programmes utiles.

Quelle est la chose préférée que vous avez apprise dans ce tutoriel ? Dites-le-moi sur Twitter !

Vous pouvez lire mes autres articles ici.

Vecteur de travail créé par macrovector - www.freepik.com