Aller au contenu principal

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