Le shell ne se limite pas à exécuter des commandes. Il permet également de manipuler des flux, de chaîner des opérations, d’utiliser des variables et d’automatiser des tâches.
Les exemples suivants utilisent Bash.
Entrées et sorties standard#
Sous Linux, un processus dispose généralement de trois flux standards :
| Flux | Descripteur | Rôle |
|---|---|---|
stdin | 0 | Entrée standard |
stdout | 1 | Sortie standard |
stderr | 2 | Sortie d’erreur |
Par défaut, les deux sorties sont généralement affichées dans le terminal, tandis que l’entrée peut provenir du clavier.
Ces flux peuvent être redirigés.
Redirections#
Les redirections permettent d’enregistrer les résultats d’une commande dans un fichier ou d’utiliser un fichier comme entrée.
cmd > out.txt # Sortie standard (écrase)
cmd >> out.txt # Sortie standard (ajoute)
cmd 2> err.txt # Erreurs uniquement
cmd > all.txt 2>&1 # Sortie standard + erreurs
cmd < input.txt # Utiliser un fichier comme entréeBash propose également le raccourci :
cmd &> all.txtAttention : > écrase le contenu existant du fichier. L’ordre des redirections peut également modifier leur comportement.
Pipes#
Le pipe (|) permet de transmettre la sortie standard d’une commande à l’entrée standard d’une autre.
cmd1 | cmd2Par exemple :
cat fichier.log | grep "ERROR"La première commande affiche le fichier, puis grep conserve uniquement les lignes contenant ERROR.
Une version plus directe serait :
grep "ERROR" fichier.logPlusieurs commandes peuvent être chaînées :
grep "ERROR" fichier.log | sort | uniq -cCette commande filtre les lignes, les trie puis compte les occurrences identiques.
Par défaut, le pipe transmet uniquement stdout, pas stderr.
Variables et environnement#
Le shell permet de définir des variables pour stocker des valeurs.
nom="Intechnia"
echo "$nom"Quelques variables courantes :
$HOME— répertoire personnel.$USER— nom de l’utilisateur, lorsque cette variable est définie.$PATH— chemins utilisés pour rechercher les exécutables.$PWD— répertoire courant.
Une variable shell peut être exportée pour être transmise aux processus enfants :
export APP_ENV="production"
echo "$APP_ENV"
printenv APP_ENVPour supprimer une variable :
unset APP_ENVLes variables d’environnement sont notamment utilisées pour configurer des applications et des environnements d’exécution.
Expansions et guillemets#
Bash interprète certaines expressions avant l’exécution d’une commande.
Variables#
echo "$HOME"Le shell remplace $HOME par sa valeur.
Substitution de commande#
echo "$(pwd)"La commande pwd est exécutée et sa sortie est insérée dans l’expression.
Caractères génériques#
ls *.logLe shell développe *.log en noms de fichiers correspondants.
Guillemets#
"..."— préserve le texte comme argument unique, tout en permettant notamment l’expansion des variables.'...'— conserve le contenu littéralement, sans expansion.
Exemple :
echo "$HOME" # Affiche le chemin du HOME
echo '$HOME' # Affiche littéralement $HOMEBonne pratique : placer généralement les expansions de variables entre guillemets doubles ("$variable") pour éviter les découpages inattendus.
Enchaînement des commandes#
Bash permet d’exécuter plusieurs commandes selon le résultat des précédentes.
| Opérateur | Comportement |
|---|---|
; | Exécute la commande suivante indépendamment du résultat précédent. |
&& | Exécute la suivante si la précédente a réussi. |
|| | Exécute la suivante si la précédente a échoué. |
& | Lance une commande en arrière-plan. |
Exemples :
mkdir -p rapport && cd rapportLa navigation n’est effectuée que si la création du dossier a réussi.
grep "ERROR" fichier.log || echo "Aucune correspondance ou erreur"Le message est affiché si grep retourne un code de sortie non nul.
Sous Linux, le code 0 indique généralement une réussite. Les codes non nuls signalent d’autres situations, dont des erreurs.
Scripts Bash#
Les commandes peuvent être regroupées dans un fichier pour automatiser des opérations.
Exemple de fichier script.sh :
#!/usr/bin/env bash
echo "Bonjour $USER"
echo "Répertoire : $(pwd)"Exécution :
bash script.shOu, en rendant le fichier exécutable :
chmod u+x script.sh
./script.shLa première ligne (#!/usr/bin/env bash) est appelée shebang. Elle indique l’interpréteur à utiliser lorsque le script est lancé directement.
