Cheatsheets

Bash

Aide-mémoire complet du scripting Bash : variables, tests, boucles, fonctions, chaînes, redirections et bonnes pratiques.

Le squelette d'un script

#!/usr/bin/env bash
set -euo pipefail        # arrêt sur erreur, variable non définie ou pipe cassé
IFS=$'\n\t'              # séparateur de champs plus sûr
  • #!/usr/bin/env bash : le shebang (toujours en 1ʳᵉ ligne).
  • Rendre exécutable puis lancer : chmod +x script.sh · ./script.sh.
  • Un commentaire commence par # (sauf le shebang).

Variables et paramètres

  • Affecter : var="valeur" (pas d'espace autour du =) · Lire : $var ou ${var}.
  • Par défaut les variables sont globales ; dans une fonction, préfixer avec local.
  • Constante : readonly PI=3.14.
Variable Contenu
$0 nom du script
$1, $2 1er, 2e argument
$# nombre d'arguments
$@ tous les arguments (séparés)
$* tous les arguments (une chaîne)
$? code de retour de la dernière commande
$$ PID du script
$! PID du dernier processus en arrière-plan

Substitution et expansion

  • Commande : today=$(date +%F) (préférer $(...) aux backticks).
  • Arithmétique : $(( 3 + 4 * 2 )) · incrément : (( i++ )).
  • Valeur par défaut : ${var:-defaut} (si vide) · ${var:=defaut} (et affecte).
  • Longueur : ${#var} · sous-chaîne : ${var:0:3}.
  • Accolades : echo fichier{1..3}.txtfichier1.txt fichier2.txt fichier3.txt.

Tests et conditions

if [[ "$age" -ge 18 ]]; then
  echo "majeur"
elif [[ -z "$age" ]]; then
  echo "inconnu"
else
  echo "mineur"
fi
  • Préférer [[ ... ]] à [ ... ] (plus sûr, gère &&, ||, <, =~).
  • Fichiers : -e existe · -f fichier · -d dossier · -r/-w/-x droits · -s non vide.
  • Nombres : -eq -ne -lt -le -gt -ge.
  • Chaînes : = != · -z vide · -n non vide · =~ regex.
  • case pour les choix multiples :
case "$1" in
  start)   demarrer ;;
  stop)    arreter ;;
  *)       echo "usage : $0 {start|stop}" ;;
esac

Boucles

for f in *.log; do echo "$f"; done          # sur des fichiers
for i in {1..5}; do echo "$i"; done          # sur une plage
for ((i=0; i<5; i++)); do echo "$i"; done    # style C

while read -r ligne; do echo "$ligne"; done < fichier.txt

until ping -c1 srv &>/dev/null; do sleep 2; done
  • break sort de la boucle · continue passe au tour suivant.
  • Lire un fichier ligne par ligne : while read -r ... done < fichier.

Fonctions

log() {
  local niveau="$1"; shift
  echo "[$(date +%T)] [$niveau] $*"
}

log INFO "démarrage"
  • Les arguments d'une fonction sont $1, $2… (indépendants de ceux du script).
  • return N fixe le code de retour (0 = succès) ; shift décale les arguments.

Manipulation de chaînes

  • Majuscule / minuscule : ${var^^} · ${var,,}.
  • Remplacer : ${var/ancien/nouveau} (1ʳᵉ occurrence) · ${var//.../...} (toutes).
  • Retirer un préfixe/suffixe : ${fichier%.txt} (suffixe) · ${chemin##*/} (basename).
  • Découper : IFS=',' read -ra champs <<< "$ligne".

Fichiers, redirections et pipes

Symbole Effet
> rediriger la sortie (écrase)
>> rediriger en ajoutant
2> rediriger les erreurs (stderr)
&> rediriger sortie et erreurs
< lire depuis un fichier
| envoyer la sortie vers une autre commande
  • Ignorer toute sortie : commande &>/dev/null.
  • Document ici (heredoc) :
cat > config.txt <<EOF
hôte=$HOSTNAME
date=$(date +%F)
EOF

Tableaux

fruits=(pomme poire kiwi)
echo "${fruits[0]}"        # pomme
echo "${fruits[@]}"        # tous les éléments
echo "${#fruits[@]}"       # nombre d'éléments
fruits+=(cerise)           # ajouter
  • Tableau associatif : declare -A age; age[alice]=30; echo "${age[alice]}".

Robustesse et bonnes pratiques

  • Commencer par set -euo pipefail pour échouer tôt et proprement.
  • Toujours quoter les variables : "$fichier" (évite les bugs avec les espaces).
  • Vérifier les arguments : [[ $# -lt 1 ]] && { echo "usage…"; exit 1; }.
  • read -r pour ne pas interpréter les \.
  • Tester ses scripts avec ShellCheck (linter Bash).

Pour apprendre pas à pas plutôt que réviser, voir le cours Bash de A à Z.