Qu'est-ce qu'un fichier .sh ? Guide des shell scripts, Bash & Linux
- 4 novembre 2025
- 22:51
- Par Adrien Roche
- Mis à jour 7 octobre 2026
- Tutoriels

Introduction
Les scripts shell sont au cœur de l'administration Linux et Unix : ils offrent des capacités d'automatisation puissantes qui augmentent fortement la productivité et l'efficacité de gestion des systèmes. Un fichier .sh représente un script écrit en langage shell, un langage de programmation spécialisé conçu pour interpréter des commandes et automatiser des tâches système répétitives.
Que vous soyez administrateur système gérant des centaines de serveurs, développeur qui automatise des pipelines de déploiement ou passionné de Linux désireux d'améliorer ses compétences techniques, comprendre les scripts shell est essentiel. Ce guide complet explique ce que sont les fichiers .sh, comment ils fonctionnent, les différentes implémentations de shell et propose des exemples pratiques de scripting en conditions réelles.
Qu'est-ce qu'un fichier .sh ?
Définition
Un fichier .sh est un fichier texte brut contenant une série de commandes shell exécutées séquentiellement par un interpréteur shell. L'extension .sh indique que le fichier est un script shell, même si, en pratique, de nombreux scripts shell se passent de cette extension.
Les scripts shell font le pont entre l'usage interactif en ligne de commande et la programmation complète. Ils permettent de :
-
Automatiser les tâches répétitives
-
Combiner plusieurs commandes en workflows complexes
-
Créer des outils d'administration réutilisables
-
Planifier des opérations de maintenance automatisées
-
Déployer des applications de manière programmatique
Caractéristiques
Format texte brut : Contrairement aux programmes qui doivent être compilés, les scripts shell sont du texte lisible par l'humain, interprété directement par le shell.
Basé sur un interpréteur : L'exécution dépend de l'interpréteur shell indiqué (Bash, Ksh, etc.), et non de l'architecture du système sous-jacent.
Ligne shebang : La plupart des scripts shell commencent par un shebang (#!/bin/bash) spécifiant quel interpréteur shell utiliser.
Multiplateforme : Les scripts shell s'exécutent de manière cohérente sur différents systèmes Unix/Linux (en supposant que les shells appropriés soient installés).
Applications réelles
-
Scripts de démarrage et d'arrêt système
-
Automatisation de sauvegarde et restauration
-
Surveillance et alertes serveur
-
Pipelines de déploiement applicatif
-
Traitement et analyse des fichiers de logs
-
Provisionnement de comptes utilisateurs
-
Automatisation de la configuration réseau
-
Tâches de maintenance des bases de données
Fondamentaux du shell scripting
Qu'est-ce qu'un shell ?
Un shell est un interpréteur de commandes fournissant une interface entre les utilisateurs et le noyau du système d'exploitation. Il accepte les commandes des utilisateurs, les interprète et exécute les programmes correspondants.
Fonctions du shell :
-
Lire et analyser les commandes utilisateur
-
Rechercher les programmes exécutables
-
Exécuter les programmes avec les arguments appropriés
-
Gérer la redirection des entrées/sorties
-
Gérer le contrôle des processus
-
Implémenter des constructions de programmation (boucles, conditions)
Pourquoi utiliser les scripts shell ?
Automatisation : Exécutez automatiquement des séquences complexes, sans intervention manuelle.
Efficacité : Accomplissez en quelques secondes ce qui pourrait prendre des heures à la main.
Cohérence : Assurez des opérations identiques sur plusieurs systèmes.
Documentation : Les commentaires de script documentent les procédures pour référence future.
Évolutivité : Étendez vos opérations d'un seul serveur à des centaines sans effort supplémentaire.
Restauration : Reconstruisez rapidement vos systèmes grâce aux scripts existants.
Implémentations de shell populaires
Bash (Bourne-Again Shell)
Part de marché : ~95 % des systèmes Linux
Créateur : Brian Fox (projet GNU)
Fonctionnalités : Très complètes, capacités de scripting
Syntaxe : Compatible avec le shell Bourne d'origine
Cas d'utilisation : Par défaut sur la plupart des distributions Linux
Bash est le standard de facto pour les scripts shell sous Linux. Il combine compatibilité avec les shells d'origine et fonctionnalités modernes.
Ksh (Korn Shell)
Créateur : David Korn (AT&T Bell Labs)
Fonctionnalités : Capacités de programmation avancées, exécution plus rapide
Syntaxe : Sur-ensemble du shell Bourne
Cas d'utilisation : Privilégié sur les systèmes Unix (Solaris, AIX)
Avantages : Meilleures performances pour les opérations gourmandes en calcul
Ksh reste répandu dans les environnements Unix d'entreprise, en particulier sur les systèmes Unix commerciaux.
Sh (Bourne Shell)
Shell standard POSIX d'origine
Créateur : Stephen Bourne (AT&T Bell Labs)
Fonctionnalités : Minimales et standardisées
Statut actuel : Surtout historique ; les shells contemporains assurent la compatibilité
Sh représente le standard POSIX, garantissant la compatibilité de base sur tous les systèmes de type Unix.
Zsh (Z Shell)
Créateur : Paul Falstad
Fonctionnalités : Fonctions interactives, capacités de scripting
Orientation actuelle : Expérience utilisateur enrichie plutôt que scripting pur
Cas d'utilisation : De plus en plus populaire auprès des développeurs
Zsh représente l'évolution moderne des shells, équilibrant puissance de scripting et fonctionnalités interactives conviviales.
Tcsh/Csh
Créateur de Csh : Bill Joy (Berkeley)
Version moderne : Tcsh (csh amélioré)
Fonctionnalités : Syntaxe proche du C
Statut : Usage en déclin, maintenu principalement pour la compatibilité
Les dérivés de Csh subsistent sur certains systèmes mais offrent des avantages décroissants par rapport à Bash/Ksh.
Bash vs Ksh vs autres shells
Tableau de comparaison
| Fonctionnalité | Bash | Ksh | Zsh | Sh |
|---|---|---|---|---|
| Historique des commandes | Oui | Oui | Oui | Non |
| Complétion des commandes | Basique | Basique | Avancée | Non |
| Tableaux | Indexés | Indexés + Associatifs | Oui | Non |
| Correspondance de motifs | Motifs glob | Avancée | Avancée | Limitée |
| Fonctions | Oui | Oui | Oui | Oui |
| Arithmétique | $(()) |
(()) |
$(()) |
Limitée |
| Conformité POSIX | ~95 % | 100 % | ~90 % | 100 % |
| Performance | Bonne | Meilleure | Bonne | La plus rapide |
| Fonctionnalités de script | Complètes | Plus avancées | Les plus avancées | Minimales |
| Compatibilité | Excellente | Excellente | Bonne | Universelle |
| Courbe d'apprentissage | Modérée | Modérée | Plus raide | La plus facile |
| Usage typique | Linux par défaut | Unix d'entreprise | Choix des développeurs | Compatibilité |
Quand choisir chaque shell
Choisir Bash quand :
-
Compatibilité maximale avec les systèmes Linux
-
Travailler avec des outils attendant la syntaxe Bash
-
Familiarité de l'équipe avec Bash
-
Environnements axés sur Linux
Choisir Ksh quand :
-
Opérations critiques en performance
-
Environnements Unix d'entreprise
-
Nécessitant des fonctionnalités de programmation avancées
-
Prise en charge des systèmes Unix hérités
Choisir Zsh quand :
-
Utilisation interactive du shell prioritaire
-
Expérience utilisateur avancée souhaitée
-
Environnements axés sur les développeurs
-
Distributions Linux modernes
Choisir Sh quand :
-
Portabilité POSIX maximale requise
-
Prise en charge de diverses plateformes Unix
-
Minimiser les dépendances
-
Exécution légère essentielle
Créer et exécuter des scripts shell
Créer un script shell de base
Étape 1 : Créer le fichiertouch myscript.sh
Étape 2 : Modifier le fichiernano myscript.sh
Étape 3 : Ajouter le shebang et les commandes#!/bin/bash
echo "Hello, World!"
date
Étape 4 : Rendre le fichier exécutablechmod +x myscript.sh
Étape 5 : Exécuter le script./myscript.sh
Méthodes d'exécution
Exécution directe (nécessite les droits d'exécution)./myscript.sh
Interpréteur explicitebash myscript.sh
Commande source (exécute le script dans le shell courant)source myscript.sh
or
. myscript.sh
Comprendre le shebang
Le shebang (#!) indique quel interpréteur exécute le script :#!/bin/bash # Use Bash
#!/bin/ksh # Use Ksh
#!/usr/bin/env bash # Use Bash via environment (more portable)
#!/usr/bin/python # Use Python interpreter
Syntaxe de base d'un script shell
Variables
# Variable assignment (no spaces around =)
name="John"
age=30
# Using variables
echo "Name: $name"
echo "Age: $age"
# Command substitution
current_date=$(date)
file_count=$(ls -1 | wc -l)
# Arrays (Bash)
fruits=("Apple" "Banana" "Cherry")
echo ${fruits} # Access first element
Structures conditionnelles
# If-else
if [ $age -gt 18 ]; then
echo "Adult"else
echo "Minor"
fi
# Case statement
case $day in
Monday)
echo "Start of week"
;;
Friday) echo "End of week"
;;
*)
echo "Midweek"
;;esac
Boucles
# For loopfor i in 1 2 3 4 5; do echo "Number: $i"done# While loop
count=0
while [ $count -lt 5 ]; do echo "Count: $count" ((count++))
done
# Until loop
until [ $count -eq 10 ]; do
echo "Count: $count" ((count++))
done
Fonctions
# Function definitiongreet() {echo "Hello, $1!"}# Function with return valueadd() {return $(($1 + $2))}# Function calls
greet "Alice"add 5 3echo "Sum: $?" # $? holds return valueConcepts avancés de scripting
Gestion des erreurs
#!/bin/bashset -e # Exit on error# Check command successif ! command_name; then echo "Command failed" exit 1fi# Trap errorstrap 'echo "Error on line $LINENO"' ERR
Opérations sur les fichiers
# File existence checkingif [ -f "/path/to/file" ]; then echo "File exists"fi# Directory operationsif [ -d "/path/to/dir" ]; thenecho "Directory exists"fi# Read file line-by-linewhile IFS= read -r line; doecho "Line: $line"done < filename.txt
Saisie utilisateur
# Read from userread -p "Enter your name: " name
# Read multiple valuesread -p "Enter values: " val1 val2 val3
# Read into arrayread -a array_nameExemples pratiques
Script de sauvegarde système
#!/bin/bash# Backup important directoriesBACKUP_DIR="/backup"TIMESTAMP=$(date +%Y%m%d_%H%M%S)echo "Starting backup..."# Create backup directorymkdir -p "$BACKUP_DIR"# Backup home directorytar -czf "$BACKUP_DIR/home_$TIMESTAMP.tar.gz" /home
# Backup system configurationtar -czf "$BACKUP_DIR/etc_$TIMESTAMP.tar.gz" /etc
echo "Backup complete: $BACKUP_DIR/home_$TIMESTAMP.tar.gz"
Surveillance de l'espace disque
#!/bin/bashTHRESHOLD=80ALERT_EMAIL="[email protected]"# Check disk usagedisk_usage=$(df / | awk 'NR==2 {print $5}' | cut -d'%' -f1)if [ $disk_usage -gt $THRESHOLD ]; thenecho "Disk usage critical: $disk_usage%" | mail -s "Alert" $ALERT_EMAILecho "Alert sent to $ALERT_EMAIL"fi
Provisionnement de comptes utilisateurs
#!/bin/bashread -p "Enter username: " usernameread -p "Enter email: " email
# Create useruseradd -m -s /bin/bash "$username"# Set password (prompt method recommended)echo "Set password for $username:"passwd "$username"# Add to groupsusermod -aG sudo "$username"echo "User $username created successfully"Pourquoi l'administration de serveurs à distance utilise des scripts shell
Les administrateurs système gérant des serveurs distants via des connexions RDP ou SSH exécutent fréquemment des scripts shell pour :
-
Déploiements automatisés : Déployez des applications sur plusieurs serveurs simultanément
-
Maintenance système : Planifiez et exécutez les tâches de maintenance de routine
-
Supervision : Surveillez en continu l'état du système et consignez les anomalies
-
Sauvegardes : Automatisez les procédures de sauvegarde des données critiques
-
Mises à jour de sécurité : Déployez les correctifs de sécurité sur l'infrastructure
Les plateformes professionnelles de gestion de bureau à distance comme RDP.Monster permettent d'exécuter des scripts shell sur l'ensemble de l'infrastructure d'entreprise :
Gestion de l'infrastructure Linux avec RDP.Monster
Gestion Linux d'entreprise
-
Accès SSH pour l'exécution distante de scripts shell
-
Capacités de déploiement automatisé
-
Opérations par lots sur plusieurs serveurs
-
Surveillance et alertes en temps réel
Solutions VPS pour l'infrastructure de scripts
-
Ressources dédiées pour scripts intensifs en calcul
-
Planification persistante des tâches cron
-
Disponibilité fiable pour les opérations planifiées
-
Infrastructure évolutive pour la complexité croissante des scripts
Conclusion
Les scripts shell sont un puissant outil d'automatisation, indispensable à l'administration système Linux et au développement. Comprendre les fichiers .sh, les implémentations de shell et les techniques de scripting permet aux professionnels de l'informatique d'augmenter considérablement leur productivité, de garantir la cohérence et de gérer efficacement des infrastructures complexes.
Que vous utilisiez Bash sur Linux, Ksh sur Unix d'entreprise ou Zsh pour le développement interactif, maîtriser les scripts shell sépare les administrateurs compétents de ceux qui ne sont que capables. L'investissement dans le développement de solides compétences en scripting offre des retours pendant des décennies de gestion de systèmes Linux.
Vous gérez une infrastructure Linux complexe qui exige une automatisation poussée ? RDP.Monster fournit un accès SSH et une infrastructure VPS optimisée pour exécuter à grande échelle des scripts shell critiques. Découvrez dès aujourd'hui des solutions VPS adaptées à Linux.
Hébergement VPS Linux performant
Bénéficiez d'un contrôle total et de performances fulgurantes avec nos VPS Linux. Parfait pour héberger des applications, gérer des serveurs et optimiser votre workflow.
Serveurs dédiés haute performance
Besoin d'un contrôle et d'une puissance maximum ? Nos serveurs dédiés offrent des performances inégalées pour les tâches exigeantes.
Foire aux questions
Quelle est la différence entre les scripts .sh et bash ?
Un script bash fonctionne sous .sh, mais tous les scripts .sh ne sont pas du bash.
Faut-il utiliser #!/bin/bash ou #!/usr/bin/env bash ?
Pourquoi mes scripts échouent-ils lorsqu'ils sont lancés via cron ?
Utilisez des chemins absolus, définissez explicitement les variables d'environnement et spécifiez le chemin complet de l'interpréteur dans le shebang.
Comment rendre un script exécutable ?
Puis-je exécuter des scripts shell sous Windows ?
Windows natif privilégie PowerShell pour l'automatisation.
Quelle est la différence entre les commandes . et source ?
source est plus explicite ; . est compatible avec d'anciens shells.
Comment déboguer un script shell ?
Utilisez bash -x scriptname.sh pour une trace d'exécution ligne par ligne, ou ajoutez set -x dans le script.
Puis-je passer des arguments aux scripts shell ?
Utilisez les paramètres positionnels : $1 (premier argument), $2 (deuxième), etc. $@ contient tous les arguments.
Adrien Roche, Rédacteur infrastructure & hébergement
Ingénieur systèmes avec plus de 10 ans d'exploitation de parcs Windows Server et Linux. Adrien gère la documentation infrastructure de rdp.monster et rédige nos guides sur le RDP, l'hébergement VPS, l'administration serveur, le réseau et les outils de confidentialité.




