Aller au contenu

Fondamentaux

Comprendre ce qu'est un shell, comment il s'integre dans le workflow de développement, et maîtriser les concepts essentiels.


Shell interactif vs shell script

Le shell joue deux rôles distincts :

Rôle Usage Exemple
Interactif Taper des commandes, naviguer, lancer des outils Taper git status dans le terminal
Script Automatiser des sequences de commandes Fichier deploy.sh execute par CI

Cette distinction est importante car la configuration differe :

  • Shell interactif : lit ~/.zshrc (ou ~/.bashrc) — aliases, prompt, plugins
  • Shell de login : lit ~/.zprofile (ou ~/.bash_profile) — variables d'environnement, PATH
  • Shell script : ne lit aucun fichier de configuration par defaut
graph TD
    A["Ouverture terminal"] --> B{"Login shell ?"}
    B -->|oui| C[".zprofile / .bash_profile"]
    B -->|non| D[".zshrc / .bashrc"]
    C --> D
    E["Script ./deploy.sh"] --> F["Aucun fichier RC"]

Anatomie d'une commande

graph TD
    CMD["commande<br/><strong>git</strong>"] --> EXEC[Exécution]
    OPT["options<br/><strong>-m &quot;msg&quot;</strong>"] --> EXEC
    ARG["arguments<br/><strong>commit</strong>"] --> EXEC
Élément Description Exemples
Commande Programme a exécuter git, ls, python
Options Modificateurs de comportement -v (verbose), --help, -m "msg"
Arguments Données sur lesquelles opérer fichiers, chemins, noms

Options courtes vs longues

# Court : compact, combine possible
ls -la           # -l (long) + -a (all)
tar -xzf file.tar.gz

# Long : lisible, auto-documente
ls --all --long
git commit --message "feat: add login"

Dans les scripts, preferez les options longues

--recursive est plus lisible que -R quand on relit un script 6 mois plus tard.

PATH et résolution des commandes

Quand vous tapez une commande, le shell la cherche dans les répertoires listes dans $PATH :

# Afficher le PATH (un repertoire par ligne)
echo $PATH | tr ':' '\n'

# Trouver ou se situe une commande
which python
# /usr/bin/python

type git
# git is /usr/bin/git

L'ordre compte : le premier répertoire contenant la commande gagne.

# Ajouter un repertoire au PATH (dans .zshrc ou .zprofile)
export PATH="$HOME/.local/bin:$PATH"

Variables d'environnement

Variable Usage
$HOME Répertoire personnel (/home/user ou /Users/user)
$PATH Répertoires de recherche des commandes
$EDITOR Éditeur par defaut (code, vim, nano)
$SHELL Shell courant (/bin/zsh)
$USER Nom de l'utilisateur
$PWD Répertoire courant
# Definir une variable pour la session
export EDITOR="code --wait"

# Definir une variable permanente (dans .zshrc)
echo 'export EDITOR="code --wait"' >> ~/.zshrc

Redirections et pipes

Syntaxe Action
cmd > fichier Redirige stdout vers un fichier (ecrase)
cmd >> fichier Redirige stdout vers un fichier (append)
cmd 2> fichier Redirige stderr vers un fichier
cmd &> fichier Redirige stdout + stderr
cmd1 \| cmd2 Pipe : stdout de cmd1 → stdin de cmd2
# Exemple : chercher les erreurs dans un log
cat app.log | grep ERROR | sort | uniq -c | sort -rn | head -10

Codes de retour

Chaque commande retourne un code :

Code Signification
0 Succès
1 Erreur generique
2 Mauvaise utilisation
127 Commande non trouvee
130 Interrompu par Ctrl+C
# Verifier le code de retour
git status
echo $?   # 0 si OK

# Enchainer conditionnellement
make build && make test    # test seulement si build reussit
make build || echo "FAIL"  # affiche FAIL si build echoue