Chapitre 6.2 - Variables et Paramètres
Objectifs d'Apprentissage
À la fin de ce chapitre, vous serez capable de:
- Utiliser les variables avancées
- Travailler avec les paramètres de script
- Comprendre les variables spéciales
- Utiliser les tableaux
- Gérer les variables d'environnement
Variables Avancées
Substitution de Variables
#!/bin/bash
VAR="hello"
# Valeur par défaut
echo ${VAR:-"default"} # hello (si VAR existe)
echo ${UNDEF:-"default"} # default (si UNDEF n'existe pas)
# Assigner si non définie
echo ${VAR:="default"} # hello (VAR existe déjà)
echo ${UNDEF:="default"} # default (et assigne UNDEF)
# Erreur si non définie
echo ${VAR:?"VAR n'est pas définie"} # OK
echo ${UNDEF:?"UNDEF n'est pas définie"} # Erreur
# Supprimer préfixe/suffixe
FILE="fichier.txt"
echo ${FILE%.txt} # fichier (supprime .txt)
echo ${FILE#fichier} # .txt (supprime fichier)
Longueur de Chaîne
#!/bin/bash
TEXT="Linux"
echo ${#TEXT} # 5 (longueur)
Extraction de Sous-chaîne
#!/bin/bash
TEXT="Hello Linux World"
echo ${TEXT:6} # Linux World (à partir position 6)
echo ${TEXT:6:5} # Linux (position 6, longueur 5)
Paramètres de Script
Arguments Positionnels
#!/bin/bash
# $0: Nom du script
# $1, $2, $3...: Arguments
# $#: Nombre d'arguments
# $@: Tous les arguments (séparés)
# $*: Tous les arguments (une chaîne)
echo "Script: $0"
echo "Premier: $1"
echo "Deuxième: $2"
echo "Nombre: $#"
echo "Tous (@): $@"
echo "Tous (*): $*"
Exemple:
./script.sh arg1 arg2 arg3
# $0 = ./script.sh
# $1 = arg1
# $2 = arg2
# $3 = arg3
# $# = 3
Décalage d'Arguments
#!/bin/bash
# shift: Décale les arguments
echo "1: $1"
shift
echo "2: $1" # Ancien $2
shift
echo "3: $1" # Ancien $3
Parcourir les Arguments
#!/bin/bash
# Méthode 1: $@
for arg in "$@"; do
echo "Argument: $arg"
done
# Méthode 2: $*
for arg in $*; do
echo "Argument: $arg"
done
# Méthode 3: while avec shift
while [ $# -gt 0 ]; do
echo "Argument: $1"
shift
done
Tableaux
Déclaration
#!/bin/bash
# Déclaration
FRUITS=("pomme" "banane" "orange")
# Ou
FRUITS[0]="pomme"
FRUITS[1]="banane"
FRUITS[2]="orange"
Accès
#!/bin/bash
FRUITS=("pomme" "banane" "orange")
# Élément spécifique
echo ${FRUITS[0]} # pomme
echo ${FRUITS[1]} # banane
# Tous les éléments
echo ${FRUITS[@]} # pomme banane orange
echo ${FRUITS[*]} # pomme banane orange
# Longueur
echo ${#FRUITS[@]} # 3
# Indices
echo ${!FRUITS[@]} # 0 1 2
Parcourir un Tableau
#!/bin/bash
FRUITS=("pomme" "banane" "orange")
# Par valeur
for fruit in "${FRUITS[@]}"; do
echo "Fruit: $fruit"
done
# Par indice
for i in "${!FRUITS[@]}"; do
echo "$i: ${FRUITS[$i]}"
done
Variables d'Environnement
Définir
#!/bin/bash
# Variable locale (script seulement)
LOCAL_VAR="local"
# Variable d'environnement (exportée)
export ENV_VAR="environment"
# Ou
ENV_VAR="environment"
export ENV_VAR
Variables Système Courantes
#!/bin/bash
echo "HOME: $HOME"
echo "USER: $USER"
echo "PATH: $PATH"
echo "SHELL: $SHELL"
echo "PWD: $PWD"
echo "UID: $UID"
echo "EUID: $EUID"
Modifier PATH
#!/bin/bash
# Ajouter au PATH
export PATH="$PATH:/chemin/vers/bin"
# Temporaire (script seulement)
PATH="$PATH:/chemin/vers/bin"
Variables Spéciales
Code de Retour
#!/bin/bash
# $?: Code de retour de la dernière commande
ls /tmp
echo "Code: $?" # 0 si succès
# Tester
if [ $? -eq 0 ]; then
echo "Succès"
else
echo "Échec"
fi
PID et Processus
#!/bin/bash
echo "PID actuel: $$"
echo "PID parent: $PPID"
echo "Dernier PID en arrière-plan: $!"
Options du Shell
#!/bin/bash
# $-: Options actives
echo "Options: $-"
Exemple Complet
#!/bin/bash
# Script avec paramètres et tableaux
# Fonction d'aide
afficher_aide() {
echo "Usage: $0 [OPTIONS] FICHIERS..."
echo "Options:"
echo " -h Aide"
echo " -v Mode verbeux"
echo " -o Fichier de sortie"
}
# Variables
VERBEUX=false
OUTPUT=""
FICHIERS=()
# Parser arguments
while [ $# -gt 0 ]; do
case $1 in
-h)
afficher_aide
exit 0
;;
-v)
VERBEUX=true
;;
-o)
shift
OUTPUT="$1"
;;
*)
FICHIERS+=("$1")
;;
esac
shift
done
# Traitement
if [ ${#FICHIERS[@]} -eq 0 ]; then
echo "Erreur: Aucun fichier spécifié"
exit 1
fi
[ "$VERBEUX" = true ] && echo "Traitement de ${#FICHIERS[@]} fichier(s)"
for fichier in "${FICHIERS[@]}"; do
[ "$VERBEUX" = true ] && echo "Traitement: $fichier"
# Traitement...
done
Résumé
Dans ce chapitre, vous avez appris:
Substitution: \${VAR:-default}, \${VAR%pattern}, etc.
Paramètres: $0, $1-$n, $#, $@, $*
Tableaux: Déclaration, accès, parcours
Environnement: export, variables système
Spéciales: $?, $$, $PPID, $-
Parsing: while + case pour arguments
Prochaines Étapes
Chapitre 6.3: Structures de Contrôle
Chapitre 6.4: Fonctions et Cron
Chapitre créé le: Décembre 2024