Le scripting Shell, c'est comme avoir un assistant personnel qui ne dort jamais, ne se plaint jamais et exécute vos ordres avec une précision robotique. C'est l'art de lier ensemble des instructions en ligne de commande pour créer des flux de travail puissants et automatisés.
Comment le scripting Shell peut-il vous aider ?
- Automatiser les tâches répétitives (parce que la vie est trop courte pour ctrl+C, ctrl+V)
- Gérer les processus système comme un pro
- Créer des opérations reproductibles (pour que votre futur vous ne maudisse pas votre passé)
- Montrer vos compétences Linux et impressionner vos collègues
Avant de retrousser nos manches, clarifions une chose : nous parlons ici de Bash. Bien sûr, il existe d'autres shells comme Zsh, Fish ou le bon vieux Sh, mais Bash est le cool que tout le monde fréquente dans le terrain de jeu Linux.
Votre premier rendez-vous avec le scripting Shell
Commençons par le classique "Hello, World!" parce que, eh bien, c'est la tradition :
#!/bin/bash
echo "Hello, World! Je suis un script shell, enchanté de vous rencontrer !"
Enregistrez ceci sous hello_world.sh
, et décomposons-le :
#!/bin/bash
: C'est ce qu'on appelle un shebang. C'est comme dire à l'ordinateur, "Hé, exécute ça avec Bash, s'il te plaît !"echo
: Cette commande est comme crier dans le vide, sauf que le vide est votre terminal.
Maintenant, rendons-le exécutable et lançons-le :
chmod +x hello_world.sh
./hello_world.sh
Boum ! Vous êtes maintenant officiellement un script shell. Mettez ça sur votre CV ! 😄
Les variables : l'épice de la vie Shell
Les variables dans les scripts shell sont comme des conteneurs pour vos affaires numériques. Amusons-nous un peu :
#!/bin/bash
# Assigner une valeur à une variable
greeting="Bonjour, terrien !"
# Utiliser la variable
echo $greeting
# Obtenir une entrée de l'utilisateur
read -p "Quel est votre nom ? " name
echo "Ravi de vous rencontrer, $name !"
Conseil de pro : Lorsque vous utilisez des variables, entourez-les d'accolades comme ${variable}
pour éviter toute ambiguïté. Votre futur vous vous en remerciera.
Structures de contrôle : Plier le Shell à votre volonté
Ajoutons maintenant un peu de logique à nos scripts. Nous commencerons par la structure if-then-else, le pain et le beurre de la prise de décision :
#!/bin/bash
read -p "Entrez un nombre : " num
if [ $num -gt 10 ]; then
echo "C'est un grand nombre !"
elif [ $num -eq 10 ]; then
echo "Vous avez atteint le point idéal !"
else
echo "Pensez plus grand !"
fi
Et voici une boucle pour vous faire sentir comme dans The Matrix :
#!/bin/bash
for i in {1..5}
do
echo "Itération $i"
sleep 1 # Pause pour l'effet dramatique
done
echo "Boucle terminée. Esprit = Époustouflé."
Opérations sur les fichiers : Parce que les données ne se déplacent pas toutes seules
Créons un script qui sauvegarde un fichier et ajoute un horodatage :
#!/bin/bash
# Vérifier si un nom de fichier a été fourni
if [ $# -eq 0 ]; then
echo "Utilisation : $0 "
exit 1
fi
filename=$1
timestamp=$(date +"%Y%m%d_%H%M%S")
backup_file="${filename}_${timestamp}.bak"
# Vérifier si le fichier existe
if [ ! -f "$filename" ]; then
echo "Erreur : Fichier '$filename' non trouvé."
exit 1
fi
# Créer la sauvegarde
cp "$filename" "$backup_file"
if [ $? -eq 0 ]; then
echo "Sauvegarde créée avec succès : $backup_file"
else
echo "Erreur : Échec de la sauvegarde."
fi
Ce script introduit quelques nouveaux concepts :
$#
: Le nombre d'arguments passés au script$1
: Le premier argument passé au script$(command)
: Substitution de commande - exécute une commande et renvoie le résultat$?
: Le statut de sortie de la dernière commande (0 signifie succès)
Gestion des erreurs : Parce que les erreurs arrivent
Améliorons notre script avec une gestion des erreurs :
#!/bin/bash
set -e # Quitter immédiatement si une commande se termine avec un statut non nul
set -u # Considérer les variables non définies comme une erreur
log_error() {
echo "ERREUR : $1" >&2
}
backup_file() {
local filename=$1
local backup_dir="/tmp/backups"
# Créer le répertoire de sauvegarde s'il n'existe pas
mkdir -p "$backup_dir" || { log_error "Échec de la création du répertoire de sauvegarde"; return 1; }
# Copier le fichier dans le répertoire de sauvegarde
cp "$filename" "$backup_dir" || { log_error "Échec de la copie du fichier"; return 1; }
echo "Sauvegarde de $filename créée dans $backup_dir"
}
# Exécution principale du script
main() {
if [ $# -eq 0 ]; then
log_error "Utilisation : $0 "
exit 1
fi
backup_file "$1"
}
main "$@"
Ce script introduit :
set -e
etset -u
pour un contrôle d'erreur plus strict- Une fonction pour la journalisation des erreurs
- Une fonction principale pour organiser la logique du script
Techniques avancées : Améliorer votre jeu Shell
Maintenant que nous avons couvert les bases, regardons quelques techniques plus avancées :
1. Utilisation des tableaux
#!/bin/bash
# Déclarer un tableau
fruits=("pomme" "banane" "cerise")
# Boucler à travers le tableau
for fruit in "${fruits[@]}"
do
echo "J'aime $fruit"
done
# Ajouter un élément au tableau
fruits+=("datte")
# Imprimer tout le tableau
echo "Tous les fruits : ${fruits[*]}"
2. Fonction avec valeurs de retour
#!/bin/bash
is_even() {
if [ $(($1 % 2)) -eq 0 ]; then
return 0 # Vrai (en bash, 0 est vrai)
else
return 1 # Faux
fi
}
number=42
if is_even $number; then
echo "$number est pair"
else
echo "$number est impair"
fi
3. Lecture à partir d'un fichier
#!/bin/bash
filename="sample.txt"
while IFS= read -r line
do
echo "Ligne : $line"
done < "$filename"
Bonnes pratiques : Ne vous tirez pas une balle dans le pied
- Utilisez toujours
set -e
etset -u
au début de vos scripts - Citez vos variables :
"$variable"
au lieu de$variable
- Utilisez des variables
local
dans les fonctions pour éviter de polluer l'espace de noms global - Commentez votre code (votre futur vous vous en remerciera)
- Utilisez des noms de variables et de fonctions significatifs
- Testez vos scripts de manière approfondie, en particulier les cas limites
Pièges courants : Apprenez des erreurs des autres
- Oublier de rendre votre script exécutable (
chmod +x script.sh
) - Utiliser
==
au lieu de=
pour la comparaison de chaînes dans les crochetstest
- Ne pas gérer les espaces dans les noms de fichiers (utilisez des guillemets !)
- Supposer qu'une commande a réussi sans vérifier son statut de sortie
Conclusion : Le Shell et au-delà
Félicitations ! Vous avez fait vos premiers pas dans le monde puissant du scripting Shell. Avec ces compétences, vous êtes bien parti pour automatiser des tâches, gérer des systèmes et être généralement un ninja de la ligne de commande.
Rappelez-vous, le scripting Shell n'est que le début. À mesure que vous vous sentirez plus à l'aise, vous pourriez vouloir explorer :
- Un traitement de texte plus avancé avec
awk
etsed
- Planifier vos scripts avec
cron
- Versionner vos scripts avec Git
- Intégrer vos scripts avec d'autres outils et services
Continuez à expérimenter, continuez à apprendre, et surtout, continuez à scripter ! La ligne de commande est votre huître, et vous avez les outils pour l'ouvrir.
"La différence entre un bon admin et un grand admin, c'est environ 40 scripts shell." - Inconnu
Maintenant, allez de l'avant et automatisez tout ! 🚀