Qu'est-ce qu'un fichier .sh ? Guide des shell scripts, Bash & Linux
- 4 novembre 2025
- 22:51
- 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
A .sh file is a plain text file containing a series of shell commands executed sequentially by a shell interpreter. The .sh extension indicates the file is a shell script, though many shell scripts omit this extension in practice.
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
Plain Text Format: Unlike compiled programs requiring compilation, shell scripts are human-readable text interpreted directly by the shell.
Interpreter-Based: Execution depends on the specified shell interpreter (Bash, Ksh, etc.), not the underlying system architecture.
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 ?
Automation: Execute complex sequences automatically without manual intervention.
Efficiency: Complete in seconds what might take hours manually.
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.
Scalability: Scale operations from one server to hundreds without additional effort.
Recovery: Rebuild systems quickly using existing scripts.
Implémentations de shell populaires
Bash (Bourne-Again Shell)
Market Share: ~95% of Linux systems
Creator: Brian Fox (GNU Project)
Features: Complètes feature set, scripting capabilities
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)
Creator: David Korn (AT&T Bell Labs)
Features: Avancé programming capabilities, faster execution
Syntax: Superset of Bourne shell
Use Case: Preferred on Unix systems (Solaris, AIX)
Advantages: Meilleure performance for compute-intensive operations
Ksh reste répandu dans les environnements Unix d'entreprise, en particulier sur les systèmes Unix commerciaux.
Sh (Bourne Shell)
Original POSIX Standard Shell
Creator: Stephen Bourne (AT&T Bell Labs)
Features: Minimales, standardized functionality
Modern Status: Largely historical; contemporary shells provide compatibility
Sh représente le standard POSIX, garantissant la compatibilité de base sur tous les systèmes de type Unix.
Zsh (Z Shell)
Creator: Paul Falstad
Features: Interactive features, scripting capabilities
Modern Focus: Enhanced user experience over pure scripting
Use Case: Growing in popularity among developers
Zsh représente l'évolution moderne des shells, équilibrant puissance de scripting et fonctionnalités interactives conviviales.
Tcsh/Csh
Csh Creator: Bill Joy (Berkeley)
Modern Version: Tcsh (enhanced csh)
Features: C-like syntax
Status: Declining usage, maintained primarily for compatibility
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
| Feature | Bash | Ksh | Zsh | Sh |
|---|---|---|---|---|
| Historique des commandes | Yes | Yes | Yes | No |
| Complétion des commandes | Basic | Basic | Avancé | No |
| Tableaux | Indexés | Indexés + Associatifs | Yes | No |
| Correspondance de motifs | Motifs glob | Avancé | Avancé | Limité |
| Fonctions | Yes | Yes | Yes | Yes |
| Arithmétique | $(()) |
(()) |
$(()) |
Limité |
| Conformité POSIX | ~95% | 100% | ~90% | 100% |
| Performance | Good | Meilleure | Good | La plus rapide |
| Fonctionnalités de script | Complètes | Plus avancées | Les plus avancées | Minimales |
| Compatibilité | Excellente | Excellente | Good | 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 | Compatibility |
When to Choose Each 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
-
Unix d'entreprise environments
-
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
-
Avancé user experience desired
-
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
Creating a Basic Shell Script
Step 1: Create Filetouch myscript.sh
Step 2: Edit Filenano myscript.sh
Step 3: Add Shebang and Commands#!/bin/bash
echo "Hello, World!"
date
Step 4: Make Executablechmod +x myscript.sh
Step 5: Execute./myscript.sh
Execution Methods
Direct Execution (requires executable permissions)./myscript.sh
Explicit Interpreterbash myscript.sh
Source Command (executes in current shell)source myscript.sh
or
. myscript.sh
Understanding the Shebang
The shebang (#!) specifies which interpreter executes the 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
Conditional Statements
# 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
Loops
# 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
Functions
# 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
Error Handling
#!/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
File Operations
# 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
User Input
# Read from userread -p "Enter your name: " name
# Read multiple valuesread -p "Enter values: " val1 val2 val3
# Read into arrayread -a array_nameExemples pratiques
System Backup Script
#!/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"
Disk Space Monitor
#!/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
User Account Provisioning
#!/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
-
Monitoring: Continuously monitor system health and log anomalies
-
Backup Operations: Automate critical data backup procedures
-
Mises à jour de sécurité : Déployez les correctifs de sécurité sur l'infrastructure
Professional remote desktop management platforms like RDP.Monster enable shell script execution across enterprise infrastructure:
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
Deploy enterprise Linux infrastructure for sophisticated shell script operations with RDP.Monster
Conclusion
Shell scripts represent a powerful automation tool essential for Linux system administration and development. Understanding .sh files, shell implementations, and scripting techniques enables IT professionals to dramatically increase productivity, ensure consistency, and manage complex infrastructure efficiently.
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.
Managing complex Linux infrastructure requiring sophisticated automation? RDP.Monster provides SSH access and VPS infrastructure optimized for running mission-critical shell scripts at scale. Explore Linux-friendly VPS solutions today.
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'anciennes shells.
Comment déboguer un script shell ?
Utilisez bash -x scriptname.sh pour un 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.
Articles connexes




