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 "msg"</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.
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 |