Script Bash – Comment effectuer une pause avec la commande sleep ?
Sommaire
I. Présentation
Si vous avez besoin d'effectuer une pause ou de marquer un temps d'arrêt dans un script Bash, la commande sleep devrait vous rendre bien des services !
Cette commande simple peut s'avérer utile, par exemple, pour effectuer une pause entre deux instructions. Elle permet d'éviter l'exécution immédiate des commandes suivantes. La bonne nouvelle, c'est que sleep est une commande native des systèmes Unix/Linux, et elle s'intègre parfaitement dans les scripts pour offrir un contrôle temporel.
Dans ce tutoriel, nous allons évoquer la syntaxe de cette commande et nous verrons comment l'utiliser au travers de plusieurs exemples.
- Introduction au scripting Bash : comment écrire son premier script Bash ? Ou sur YouTube avec notre vidéo
Version originale de l'article : 19 avril 2013
II. La syntaxe de la commande sleep
La syntaxe de base de la commande sleep est simple :
sleep [nombre][suffixe]
Le paramètre [nombre] correspond à la durée de la pause, tandis que le paramètre [suffixe] indique l'unité de temps. Par défaut, la pause est exprimée en seconde, donc il est envisageable de ne pas préciser de suffixe.
Voici les autres unités de temps que vous pouvez utiliser :
- s : secondes (par défaut, donc facultatif).
- m : minutes.
- h : heures.
- d : jours.
Exemples d'utilisation :
- sleep 5 : pause de 5 secondes.
- sleep 2m : pause de 2 minutes.
- sleep 1h : pause de 1 heure.
- sleep 0.5 : pause de 0,5 seconde (500 millisecondes).
Voilà, vous savez déjà tout pour utiliser la commande sleep sur Linux ! Mais, nous allons tout de même voir son intégration dans un script Bash.
III. Exemple d'utilisation de sleep
Voici quelques exemples concrets d'utilisation de la commande sleep dans des scripts Bash :
1. Pause simple entre deux commandes :
Dans cet exemple, le script affiche un message (instruction "echo"), attend 5 secondes, puis affiche un autre message.
#!/bin/bash
echo "Début de la tâche..."
sleep 5
echo "Tâche terminée après 5 secondes."
Pour bien montrer que la commande sleep fonctionne correctement, nous pourrions afficher la date avant et après la pause. Ici, avec une pause de 10 secondes.
date
sleep 10
date
Ce qui donne :
2. Pause dans une boucle :
Ce script boucle 5 fois grâce à une boucle For, affichant un message à chaque itération avec une pause d'une seconde entre chaque itération.
#!/bin/bash
for i in {1..5}
do
echo "Itération $i"
sleep 1
done
3. Délai avant le démarrage d'un service :
Dans cet exemple, une pause de 5 secondes est introduite entre l'arrêt et le redémarrage du service Apache.
#!/bin/bash
echo "Arrêt du service..."
systemctl stop apache2
sleep 5
echo "Redémarrage du service..."
systemctl start apache2
4. Attendre qu'une machine soit en ligne
Terminons par un dernier exemple pratique, dont l'objectif est le suivant : effectuer un ping sur une adresse IP et indiquer le message "Hôte en ligne" quand celle-ci sera en ligne. Pour éviter d'effectuer des ping trop réguliers, nous allons espacer chaque tentative de 3 secondes grâce à la commande sleep ! Ici, nous utiliserons une boucle while en Bash, en indiquant ":", afin de créer une boucle infinie ! Lorsque la machine répondra au ping, en plus d'écrire un message dans la console, nous effectuerons un "break" afin de sortir de la boucle. Ici, le ping est effectué vers "192.168.1.1".
Ce qui donne le code suivant :
#!/bin/bash
host=192.168.1.1
while :
do
if ping -c 1 $host &> /dev/null
then
echo "Hôte en ligne !"
break
fi
sleep 3
done
IV. Conclusion
La commande sleep ne fait rien de plus que ce que l'on attend d'elle : faire une pause d'une durée définie. Si vous avez l'habitude d'écrire des scripts Bash, vous aurez probablement besoin d'en faire usage à un moment ou un autre.
En la combinant avec d'autres outils ou commandes, il est possible de concevoir des scripts encore plus performants et adaptés à des cas d'utilisation variés.