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 ($1est 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 dansma_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 $FICHIERpeut avoir des conséquences désastreuses si$FICHIERcontient 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
-
Script de salutation :
- Créez un script
saluer.shqui 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.
- Créez un script
-
Confirmation utilisateur :
- Écrivez un script
danger.shqui 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.”
- Écrivez un script
-
Calculatrice simple :
- Créez un script
calcul.shqui 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.
- Créez un script