Retour au cours

variables dans les scripts : arguments et lecture utilisateur

Objectifs

  • Définir et utiliser des variables pour stocker des informations dans un script.
  • Accéder aux arguments passés à un script depuis la ligne de commande.
  • Lire une entrée depuis le clavier pour rendre un script interactif.
  • Valider les entrées pour rendre les scripts plus robustes.

Variables dans un script

Une variable est un nom qui stocke une valeur. C’est fondamental pour écrire des scripts qui ne sont pas statiques.

Définition et utilisation

La syntaxe est stricte : pas d’espaces autour du signe =. On accède à la valeur avec le préfixe $.

# Définition
APP_VERSION="1.2.0"

# Utilisation (avec des guillemets, c'est une bonne pratique !)
echo "Déploiement de la version : $APP_VERSION"

Récupérer des arguments de ligne de commande

La plupart des outils en ligne de commande acceptent des arguments. Votre script peut faire de même grâce aux paramètres positionnels.

  • $1, $2, … : Les arguments individuels ($1 est le premier).
  • $# : Le nombre total d’arguments.
  • "$@" : Représente tous les arguments, traités comme des chaînes distinctes (la méthode la plus sûre).

Script deploy.sh :

#!/usr/bin/env bash
set -euo pipefail

# On vérifie qu'on a bien reçu au moins un argument
if [[ "$#" -eq 0 ]]; then
  echo "Erreur : vous devez spécifier un environnement (ex: staging, production)." >&2
  exit 1
fi

ENV="$1"
echo "Déploiement sur l'environnement : $ENV"

Exécution : ./deploy.sh staging

Interagir avec l’utilisateur : read

La commande read permet de mettre en pause le script et d’attendre que l’utilisateur tape quelque chose.

  • read ma_variable : Lit une ligne et la stocke dans ma_variable.
  • -p "Votre question ? " : Affiche un “prompt” (une invite) à l’utilisateur.
  • -s : Lecture “silencieuse”, ce qui est tapé ne s’affiche pas. Idéal pour les mots de passe.

Script interactive.sh :

#!/usr/bin/env bash
set -euo pipefail

read -p "Quel est votre nom ? " NOM
read -s -p "Entrez votre mot de passe secret : " MOT_DE_PASSE
echo # Pour un saut de ligne après la saisie silencieuse

echo "Bonjour, $NOM. Votre secret est bien gardé."

Bonnes pratiques

  • Validez toujours les entrées. Vérifiez le nombre d’arguments ($#) et que les variables ne sont pas vides ([[ -n "$VAR" ]]) avant de les utiliser.
  • Utilisez des noms de variables clairs et en majuscules pour les variables qui agissent comme des constantes ou des paramètres importants (par convention).
  • Citez systématiquement vos variables ("$MA_VAR") pour éviter les erreurs si elles contiennent des espaces.

Pièges courants

  • Oublier les guillemets : rm $FICHIER peut avoir des conséquences désastreuses si $FICHIER contient des espaces ou des *.
  • Faire confiance aux entrées : Ne jamais utiliser une entrée utilisateur directement dans une commande sensible (rm, eval) sans la valider.
  • Syntaxe de l’affectation : MA_VAR = "valeur" est une erreur. Il ne doit y avoir aucun espace autour du =.

Exercices

  1. Script de salutation :

    • Créez un script saluer.sh qui prend un nom comme premier argument et affiche “Bienvenue, [nom] !”.
    • Améliorez-le pour qu’il affiche “Bienvenue, invité !” si aucun nom n’est fourni.
  2. Confirmation utilisateur :

    • Écrivez un script danger.sh qui affiche “ATTENTION : Action destructive sur le point d’être exécutée.”
    • Il doit ensuite demander à l’utilisateur de taper “oui” pour continuer.
    • Si l’utilisateur tape “oui”, le script affiche “Action exécutée.”. Sinon, il affiche “Annulation.”
  3. Calculatrice simple :

    • Créez un script calcul.sh qui prend deux nombres en arguments et affiche leur somme.
    • Assurez-vous que le script affiche un message d’erreur s’il ne reçoit pas exactement deux arguments.