Créa-blog

#100JoursPourCoder
Projet Créa-code

Ressources pour développeur web

Théme de la semaine : PHP version 8.5

Coder son premier script shell utile pour le web

⏱️ Temps de lecture estimé : 8 minutes
Accueil Terminal Coder son premier script shell utile pour le web

Quand on parle de développement web, on pense souvent à PHP ou JavaScript. Pourtant, un autre langage travaille souvent dans l’ombre, sans jamais réclamer la moindre gloire : le Shell. Ce petit interpréteur de commandes, utilisé dans tous les systèmes Linux et macOS, permet d’automatiser des tâches répétitives et de gagner un temps fou.

Apprendre à créer un script shell n’est pas réservé aux administrateurs systèmes. Même en tant que développeur web, cela peut vous simplifier la vie. Que ce soit pour sauvegarder automatiquement votre sitemettre à jour vos fichiers distants ou encore nettoyer un dossier de travail, un simple script shell peut devenir un véritable assistant personnel.

Dans ce guide pour shell, nous allons voir ensemble, pas à pas, comment créer votre premier script shell utile pour le web. Vous n’aurez besoin que d’un terminal, d’un éditeur de texte (comme VS Code ou Nano) et d’un peu de curiosité. L’objectif est de vous donner les bases solides pour ensuite écrire vos propres scripts adaptés à vos besoins.

Comprendre ce qu’est un script shell

Avant de se lancer tête baissée, prenons un instant pour comprendre ce que signifie “script shell”.

Le mot script désigne simplement une suite d’instructions enregistrées dans un fichier, que l’ordinateur exécute ligne par ligne. Quant au shell, il s’agit de la couche logicielle qui interprète vos commandes. Sur Linux, c’est souvent Bash (abréviation de Bourne Again Shell), mais il en existe d’autres comme Zsh ou Fish.

En clair, un script shell est un fichier texte contenant des commandes que vous pourriez taper manuellement dans votre terminal, mais regroupées pour être exécutées automatiquement.

Prenons une analogie simple : imaginez que vous deviez tous les matins ouvrir votre site en local, démarrer un serveur, vider le cache et lancer un build. Au lieu de le faire manuellement, vous notez toutes ces commandes dans un fichier que vous exécutez d’un simple clic. Voilà, vous venez de créer un script shell.

Coder votre premier script shell

Commençons par le plus simple : créer un petit script qui affiche un message à l’écran. Ouvrez votre éditeur de texte et tapez :

#!/bin/bash
echo "Bonjour, ceci est mon premier script shell !"

Enregistrez le fichier sous le nom mon_script.sh.

La première ligne #!/bin/bash s’appelle le shebang. Elle indique au système quel interpréteur utiliser pour exécuter le fichier. Ici, on lui dit : “utilise Bash pour lire ce script”. La deuxième ligne utilise la commande echo, qui affiche simplement un texte dans le terminal.

Pour exécuter ce script, il faut lui donner les droits d’exécution.Dans le terminal, tapez :

chmod +x mon_script.sh

Puis lancez-le :

./mon_script.sh

Et voilà ! Vous venez de créer votre premier script shell. C’est tout bête, mais cette base va nous permettre d’aller beaucoup plus loin.

Pour allez plus loin, consultez notre tutoriel sur CHMOD : Gérer vos fichiers et dossiers depuis le terminal.

Les variables : rendre vos scripts shell dynamiques

Les scripts shell deviennent puissants lorsqu’ils s’adaptent à différentes situations. Pour cela, on utilise des variables. Une variable, c’est une sorte de boîte dans laquelle on stocke une information, comme un texte ou un nombre.

Essayons :

#!/bin/bash
nom="Alban"
echo "Bonjour $nom, bienvenue dans le monde du Shell !"

Quand vous exécutez ce script, Bash remplace $nom par sa valeur. Vous pouvez aussi demander à l’utilisateur de saisir une valeur :

#!/bin/bash
echo "Quel est votre prénom ?"
read prenom
echo "Enchanté, $prenom !"

Ici, la commande read attend une saisie de l’utilisateur et la stocke dans la variable prenom. C’est un moyen simple d’interagir avec vos scripts.

Exemple concret : automatiser une sauvegarde de site web avec shell

Passons à quelque chose de plus utile pour votre quotidien de développeur web. Imaginons que vous souhaitiez sauvegarder votre dossier /var/www/monsite chaque soir dans un répertoire de sauvegarde.

Voici un script simple pour le faire :

#!/bin/bash

# Définition des variables
source="/var/www/monsite"
destination="/home/utilisateur/sauvegardes/monsite_$(date +%Y%m%d).tar.gz"

# Création de l’archive compressée
tar -czf "$destination" "$source"

# Message de confirmation
echo "Sauvegarde terminée : $destination"

Ce script crée une archive compressée du dossier de votre site, en ajoutant la date du jour dans le nom du fichier.

La commande tar -czf permet de compresser tout le contenu en .tar.gz, un format standard sur Linux.

En quelques secondes, vous obtenez une sauvegarde complète prête à être stockée ou transférée.

Le premier script que j’ai écrit ressemblait beaucoup à celui-là. À l’époque, je travaillais sur un site WordPress que je mettais souvent à jour à la main. Après avoir perdu une journée entière à cause d’un fichier supprimé par erreur, j’ai décidé de créer ce script.

Les conditions : rendre votre script shell intelligent

Vous pouvez rendre votre script plus “intelligent” en ajoutant des conditions. Cela permet de tester des situations avant d’exécuter certaines actions.

Par exemple, vérifions si le dossier du site existe avant de lancer la sauvegarde :

#!/bin/bash

source="/var/www/monsite"
destination="/home/utilisateur/sauvegardes/monsite_$(date +%Y%m%d).tar.gz"

if [ -d "$source" ]; then
    tar -czf "$destination" "$source"
    echo "Sauvegarde réussie !"
else
    echo "Erreur : le dossier source n’existe pas."
fi

La condition [ -d "$source" ] vérifie si le répertoire existe. Si c’est vrai, la sauvegarde s’effectue ; sinon, le script affiche un message d’erreur.

Ces petits contrôles font la différence entre un script amateur et un outil fiable.

Automatiser le transfert vers un serveur distant

Sauvegarder c’est bien, mais les conserver sur la même machine n’a pas grand intérêt en cas de panne. Voyons comment envoyer automatiquement la sauvegarde vers un serveur distant avec scp (Secure Copy Protocol) :

#!/bin/bash

source="/var/www/monsite"
destination="/home/utilisateur/sauvegardes/monsite_$(date +%Y%m%d).tar.gz"
serveur="[email protected]:/home/user/backups/"

tar -czf "$destination" "$source"

# Transfert sécurisé
scp "$destination" "$serveur"

echo "Sauvegarde transférée avec succès sur le serveur distant."

Ce script se connecte à votre serveur distant et y dépose l’archive.
Il faudra bien sûr que votre clé SSH soit configurée pour que le transfert se fasse sans mot de passe.

Imaginez le confort : vous planifiez ce script via un cron job (une tâche planifiée sous Linux) et votre site est sauvegardé tous les soirs automatiquement.

Personnaliser votre script pour le web

Les scripts shell ne servent pas qu’à la sauvegarde. Vous pouvez les utiliser pour déployer un sitevider un cachemettre à jour un dépôt Git, ou encore redémarrer un serveur Apache ou Nginx.

Formation web et informatique - Alban Guillier - Formateur

Des formations informatique pour tous !

Débutant ou curieux ? Apprenez le développement web, le référencement, le webmarketing, la bureautique, à maîtriser vos appareils Apple et bien plus encore…

Formateur indépendant, professionnel du web depuis 2006, je vous accompagne pas à pas et en cours particulier, que vous soyez débutant ou que vous souhaitiez progresser. En visio, à votre rythme, et toujours avec pédagogie.

Découvrez mes formations Qui suis-je ?

Exemple d’un petit script de déploiement automatisé :

#!/bin/bash

echo "Début du déploiement..."

cd /var/www/monsite || exit
git pull origin main
npm install
npm run build
systemctl restart nginx

echo "Déploiement terminé avec succès !"

Ce script tire la dernière version du site depuis GitHub, installe les dépendances et redémarre le serveur web. C’est typiquement le genre de script que vous pouvez lancer à chaque mise à jour de production.

Passer des paramètres à votre script

Jusqu’à présent, nous avons créé des scripts statiques : les chemins ou noms de fichiers étaient écrits en dur dans le code. Ce n’est pas très flexible. Imaginez que vous ayez plusieurs sites à sauvegarder : il faudrait copier-coller le script à chaque fois. Pas très pratique.

Heureusement, le shell permet de passer des arguments à un script. Ces arguments sont accessibles via des variables spéciales : $1$2$3, etc. Par exemple :

#!/bin/bash

source="$1"
destination="$2"

tar -czf "$destination" "$source"

echo "Sauvegarde de $source terminée dans $destination"

Vous pouvez l’exécuter ainsi :

./sauvegarde.sh /var/www/monsite /home/utilisateur/sauvegardes/monsite.tar.gz

Le script devient alors réutilisable pour n’importe quel site ou dossier. En pratique, cela permet de créer des outils universels que vous pouvez partager entre projets ou collègues.

Rendre votre script plus convivial : ajouter de l’aide

Un bon script doit être facile à comprendre, même après plusieurs mois sans y toucher. Vous pouvez ajouter un petit bloc d’aide, affiché lorsque l’utilisateur ne fournit pas les bons arguments :

#!/bin/bash

if [ $# -lt 2 ]; then
    echo "Usage : $0 <dossier_source> <fichier_destination>"
    exit 1
fi

source="$1"
destination="$2"
tar -czf "$destination" "$source"

echo "Sauvegarde de $source terminée dans $destination"

Ici, la variable spéciale $# représente le nombre d’arguments passés au script. S’il y en a moins de deux, on affiche une notice d’utilisation.

C’est le genre de détail qui donne une vraie touche professionnelle à vos scripts. Et si un jour quelqu’un d’autre doit les exécuter, il vous remerciera d’avoir pensé à la documentation intégrée.

Ajouter des fonctions pour mieux organiser le code

Tout comme en PHP ou en Python, vous pouvez définir des fonctions dans un script shell. Cela permet de structurer votre code, d’éviter les répétitions et d’améliorer la lisibilité.

Prenons un exemple plus complet : un script qui sauvegarde un site et le transfère ensuite sur un serveur distant.

#!/bin/bash

sauvegarde() {
    echo "Création de l’archive..."
    tar -czf "$1" "$2"
}

transfert() {
    echo "Transfert vers le serveur distant..."
    scp "$1" "$3"
}

if [ $# -lt 3 ]; then
    echo "Usage : $0 <source> <destination_local> <serveur_distant>"
    exit 1
fi

source="$1"
destination="$2"
serveur="$3"

sauvegarde "$destination" "$source"
transfert "$destination" "$source" "$serveur"

echo "Sauvegarde et transfert terminés avec succès."

Grâce aux fonctions sauvegarde et transfert, le script est beaucoup plus clair et plus facile à maintenir. Si vous devez modifier un comportement, vous n’avez qu’à ajuster une fonction, sans casser le reste du code.

Journaliser les actions : garder une trace

Un autre aspect souvent oublié des scripts shell, c’est la journalisation. En d’autres termes, il est parfois utile de garder une trace des actions effectuées, surtout lorsqu’un script tourne automatiquement la nuit via un cron.

Pour cela, on redirige les sorties vers un fichier :

#!/bin/bash

log="/home/utilisateur/logs/sauvegarde_$(date +%Y%m%d).log"
exec > "$log" 2>&1

echo "Début du script : $(date)"

# Exemple de commande
echo "Sauvegarde en cours..."
tar -czf /home/utilisateur/sauvegardes/site.tar.gz /var/www/monsite

echo "Fin du script : $(date)"

L’instruction exec > "$log" 2>&1 indique que toutes les sorties standard et erreurs seront écrites dans le fichier de log. Ainsi, en cas de problème, vous pouvez consulter le fichier et comprendre ce qui s’est passé.

C’est une bonne pratique dès que vous automatisez un script critique, comme une sauvegarde, une mise à jour ou un déploiement.

Programmer une exécution automatique avec CRON

Maintenant que votre script fonctionne bien, il est temps de le rendre automatique. Sous Linux, l’outil cron permet d’exécuter des commandes à intervalles réguliers. Les crons job fonctionnent aussi sous macOS. Tapez dans le terminal :

crontab -e

Puis ajoutez une ligne comme celle-ci :

0 2 * * * /home/utilisateur/scripts/sauvegarde.sh /var/www/monsite /home/utilisateur/sauvegardes/monsite_$(date +\%Y\%m\%d).tar.gz

Cette commande exécute votre script tous les jours à 2 heures du matin. Les symboles représentent respectivement les minutes, heures, jours, mois et jours de la semaine.

Une fois configuré, votre site sera sauvegardé automatiquement chaque nuit. Et si vous avez ajouté la partie “transfert SSH”, vous disposerez en plus d’une copie externe, prête à restaurer en cas de problème.

Sécuriser et entretenir vos scripts

Un script shell mal protégé peut vite devenir dangereux, surtout lorsqu’il manipule des données sensibles ou se connecte à des serveurs distants. Voici quelques conseils de base à garder en tête :

  • N’exécutez jamais de commandes contenant des variables non contrôlées.
    Par exemple, éviter rm -rf $variable si vous n’êtes pas sûr de la valeur. Une faute de frappe peut effacer votre système.
  • Vérifiez toujours les retours de commande.
    Vous pouvez tester le code de sortie d’une commande grâce à $?.
    Exemple :tar -czf sauvegarde.tar.gz /var/www/monsite if [ $? -ne 0 ]; then echo "Erreur pendant la sauvegarde" exit 1 fi
  • Ne stockez pas vos mots de passe en clair.
    Préférez l’utilisation de clés SSH pour les connexions automatiques ou des fichiers .env protégés par des droits restreints.

Enfin, pensez à commenter vos scripts. Un simple # suivi d’une explication peut vous épargner bien des migraines dans six mois.

Comprendre SSH en 30 min : Tutoriel complet et sécurisation

Exemple complet : script de maintenance automatique

Regroupons tout ce que nous avons vu dans un seul script. Celui-ci effectue une sauvegarde, un nettoyage des anciennes archives, un transfert distant et une journalisation.

#!/bin/bash

# === Configuration ===
source="/var/www/monsite"
backup_dir="/home/utilisateur/sauvegardes"
serveur="[email protected]:/home/user/backups/"
log="$backup_dir/logs/maintenance_$(date +%Y%m%d).log"

# === Fonctions ===
sauvegarde() {
    fichier="$backup_dir/monsite_$(date +%Y%m%d).tar.gz"
    tar -czf "$fichier" "$source"
    echo "Sauvegarde effectuée : $fichier"
}

nettoyage() {
    echo "Suppression des sauvegardes de plus de 7 jours..."
    find "$backup_dir" -name "*.tar.gz" -mtime +7 -delete
}

transfert() {
    echo "Transfert de la dernière sauvegarde..."
    scp "$backup_dir/monsite_$(date +%Y%m%d).tar.gz" "$serveur"
}

# === Exécution ===
exec > "$log" 2>&1
echo "=== Début de la maintenance : $(date) ==="

sauvegarde
nettoyage
transfert

echo "=== Fin de la maintenance : $(date) ==="

Ce script illustre la puissance du shell : en une quinzaine de lignes, vous automatisez entièrement la maintenance quotidienne de votre site web.

Et le meilleur, c’est qu’il ne nécessite aucun outil externe ni framework sophistiqué. Juste du texte, de la logique et un peu d’organisation.


Du petit script au grand pouvoir

Vous venez de franchir une étape importante dans votre parcours de développeur. Créer un script shell utile pour le web, ce n’est pas seulement apprendre à taper quelques commandes. C’est aussi comprendre comment maîtriser votre environnement et gagner du temps dans vos tâches répétitives.

En réalité, les scripts shell incarnent une philosophie du web que beaucoup oublient : la simplicité et l’efficacité. Un bon script n’a pas besoin d’être long pour être puissant. Ce qui compte, c’est son utilité concrète.

Commencez petit. Automatisez la sauvegarde d’un site, le nettoyage d’un répertoire, le déploiement d’une mise à jour. Puis, au fil du temps, ajoutez des options, des logs, des fonctions. Un jour, vous vous surprendrez à gérer tout votre serveur avec une poignée de scripts bien pensés.

Et c’est là que vous comprendrez pourquoi tant d’administrateurs système sourient lorsqu’ils tapent ./maintenance.sh avant de partir en pause café.