Le shell est l'interface en ligne de commande de Linux. Il permet d'exécuter des commandes et d'automatiser des tâches via des scripts. Cette fiche présente les bases du shell Bash, le plus couramment utilisé sur les systèmes Linux.
📑 Sommaire
🐚 Commandes de base
Les commandes fondamentales pour interagir avec le shell :
echo "Bonjour monde" # Affiche du texte
echo $HOME # Affiche la valeur d'une variable
read nom # Lit une entrée utilisateur et la stocke dans la variable nom
echo "Salut $nom" # Affiche la valeur de la variable
date # Affiche la date et l'heure
pwd # Affiche le répertoire courant
whoami # Affiche l'utilisateur actuel
Utilisation de l'historique des commandes :
history # Affiche l'historique des commandes
!123 # Exécute la commande numéro 123 de l'historique
!! # Exécute la dernière commande
📝 Création de scripts
Un script shell est un fichier texte contenant une série de commandes :
#!/bin/bash
# Mon premier script shell
# Le shebang #!/bin/bash indique quel interpréteur utiliser
nom="Guillaume"
echo "Bonjour $nom"
echo "Aujourd'hui nous sommes le $(date +%d/%m/%Y)"
echo "Le répertoire courant est : $(pwd)"
Pour rendre le script exécutable et l'exécuter :
chmod +x monscript.sh # Rend le script exécutable
./monscript.sh # Exécute le script
Vous pouvez aussi l'exécuter sans le rendre exécutable :
bash monscript.sh # Exécute le script avec bash
🔤 Variables et paramètres
Déclaration et utilisation des variables :
# Définition de variables
nom="Guillaume"
age=30
CONSTANTE="Valeur fixe"
# Utilisation de variables
echo "Je m'appelle $nom et j'ai $age ans"
echo "Je m'appelle ${nom} et j'ai ${age} ans" # Syntaxe avec accolades
# Variables spéciales
echo "Nom du script : $0"
echo "Premier argument : $1"
echo "Deuxième argument : $2"
echo "Tous les arguments : $@"
echo "Nombre d'arguments : $#"
echo "PID du script : $$"
echo "Code de retour de la dernière commande : $?"
Lire des entrées utilisateur :
# Lecture simple
read -p "Entrez votre nom : " nom
echo "Bonjour $nom"
# Lecture avec timeout
read -p "Entrez votre mot de passe : " -t 10 -s password
echo -e "\nVotre mot de passe a été enregistré."
🔄 Structures de contrôle
Les structures conditionnelles et les boucles :
# Structure if-elif-else
if [ "$age" -lt 18 ]; then
echo "Mineur"
elif [ "$age" -eq 18 ]; then
echo "Tout juste majeur"
else
echo "Majeur"
fi
# Boucle for
for i in 1 2 3 4 5; do
echo "Numéro $i"
done
# Boucle for avec range
for i in {1..5}; do
echo "Numéro $i"
done
# Boucle for de style C
for ((i=1; i<=5; i++)); do
echo "Numéro $i"
done
# Boucle while
compteur=1
while [ $compteur -le 5 ]; do
echo "Compteur : $compteur"
((compteur++))
done
# Boucle until (jusqu'à ce que)
compteur=5
until [ $compteur -lt 1 ]; do
echo "Décompte : $compteur"
((compteur--))
done
# Structure case (switch)
read -p "Entrez un fruit : " fruit
case $fruit in
"pomme")
echo "C'est une pomme"
;;
"orange"|"citron")
echo "C'est un agrume"
;;
*)
echo "Fruit non reconnu"
;;
esac
Opérateurs de comparaison pour les nombres :
-eq: égal à-ne: différent de-gt: supérieur à-ge: supérieur ou égal à-lt: inférieur à-le: inférieur ou égal à
Opérateurs pour les chaînes :
=ou==: égal à!=: différent de-z: chaîne vide-n: chaîne non vide
🧩 Fonctions
Déclaration et utilisation des fonctions :
# Définition de fonction
saluer() {
echo "Bonjour $1 !"
return 0
}
# Fonction avec variables locales
calculer_somme() {
local a=$1
local b=$2
echo $((a + b))
}
# Appel de fonction
saluer "Guillaume"
somme=$(calculer_somme 5 3)
echo "La somme est : $somme"
📊 Redirection et pipes
Rediriger les entrées et sorties :
# Redirection de sortie
echo "Hello" > fichier.txt # Écrit dans le fichier (écrase)
echo "World" >> fichier.txt # Ajoute au fichier
# Redirection d'entrée
sort < liste_noms.txt # Trie le contenu du fichier
# Redirection d'erreur
command 2> erreurs.log # Redirige les erreurs vers un fichier
command > output.log 2>&1 # Redirige stdout et stderr vers un fichier
# Pipes (tubes)
cat fichier.txt | grep "mot" # Filtre les lignes contenant "mot"
ps aux | grep firefox | wc -l # Compte les processus firefox
🎁 Bonus : Techniques avancées
Expressions régulières
# Vérification avec regex
if [[ $email =~ ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$ ]]; then
echo "Email valide"
else
echo "Email invalide"
fi
Tests sur les fichiers
if [ -f "$fichier" ]; then
echo "Le fichier existe"
fi
if [ -d "$dossier" ]; then
echo "Le dossier existe"
fi
if [ -x "$script" ]; then
echo "Le script est exécutable"
fi
Manipulation de chaînes
# Longueur d'une chaîne
texte="Bonjour"
echo "Longueur : ${#texte}"
# Sous-chaîne
echo "Les 3 premiers caractères : ${texte:0:3}"
# Substitution
echo "${texte/jour/soir}" # Remplace jour par soir
Tableaux
# Déclarer un tableau
fruits=("pomme" "orange" "banane")
# Accéder aux éléments
echo "Premier fruit : ${fruits[0]}"
# Parcourir un tableau
for fruit in "${fruits[@]}"; do
echo "Fruit : $fruit"
done
# Longueur du tableau
echo "Nombre de fruits : ${#fruits[@]}"