↓ Aller au contenu

Fonctionnement du shell

·4 mins·
Linux - Cet article fait partie d'une série.
Partie 3: Cet article

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 :

FluxDescripteurRôle
stdin0Entrée standard
stdout1Sortie standard
stderr2Sortie 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ée

Bash propose également le raccourci :

cmd &> all.txt

Attention : > é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 | cmd2

Par 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.log

Plusieurs commandes peuvent être chaînées :

grep "ERROR" fichier.log | sort | uniq -c

Cette 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_ENV

Pour supprimer une variable :

unset APP_ENV

Les 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 *.log

Le 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 $HOME

Bonne 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érateurComportement
;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 rapport

La 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.sh

Ou, en rendant le fichier exécutable :

chmod u+x script.sh
./script.sh

La première ligne (#!/usr/bin/env bash) est appelée shebang. Elle indique l’interpréteur à utiliser lorsque le script est lancé directement.


Référence
#

Thibault CLEMENT - Intechnia
Auteur
Thibault CLEMENT - Intechnia
Data Scientist / ML Engineer
Linux - Cet article fait partie d'une série.
Partie 3: Cet article