Question 1Quelle notation référence le premier argument dans une fonction shell ?
Fonctions — regrouper un traitement répété en un seul endroit
Cet article fait partie du Cours Linux, qui vous permet de maîtriser à partir de zéro des compétences Linux concrètes, des commandes de base jusqu'aux scripts shell.
Définis une logique avec name() { ... }, reçois des arguments via $1, garde des variables propres à la fonction avec local, et branche sur le succès avec return et $? pour réutiliser la même logique de validation — illustré et mis en pratique dans un terminal de navigateur.
Donner un nom à un bloc de logique — définir des fonctions et des arguments
Au lieu d'écrire la même logique encore et encore, tu peux l'envelopper dans une fonction et l'appeler par son nom.
Définis-en une avec name() { ... }, et place le corps entre { et }.
Une fois définie, écris simplement name pour exécuter cette logique.
Cela découpe un long script en unités significatives, et tu ne corriges les choses qu'à un seul endroit.
Pour passer des valeurs à une fonction, ajoute des arguments après le nom lors de l'appel, comme name foo bar.
À l'intérieur de la fonction, $1 est le premier argument et $2 le second (la même notation que les paramètres positionnels du script lui-même).
Entoure un argument de guillemets doubles avec "$1", et même une valeur contenant des espaces est traitée comme un seul argument.
greet() { # définir une fonction
echo "hello, $1"
}
greet alice # hello, alice
greet bob # hello, bob
greet alice bob entrent dans $1 et $2, et le corps de la fonction les utilise pour faire son travail.| Syntaxe | Signification | Exemple |
|---|---|---|
name() { … } | Définir une fonction | greet() { echo "hi $1"; } |
name args | Appeler une fonction | greet alice |
$1 | Référencer le premier argument dans la fonction | echo "name=$1" |
$2 | Référencer le second argument dans la fonction | echo "port=$2" |
Des variables qui ne vivent qu'à l'intérieur d'une fonction — local
Quand tu déclares local v=... dans une fonction, cette variable n'est valide qu'à l'intérieur de la fonction et disparaît quand la fonction se termine.
Sans local, tu écrases aussi une variable du même nom à l'extérieur de la fonction, ce qui provoque des effets de bord inattendus.
Pour réutiliser une fonction en toute sécurité comme un composant, rends local les variables de travail qu'elle utilise en interne.
msg="outer"
show() {
local msg="inner" # variable seulement dans la fonction
echo "in func: $msg"
}
show # in func: inner
echo "outside: $msg" # outside: outer (inchangé à l'extérieur)
local n'est valide qu'à l'intérieur de la fonction. Même avec le même nom, la valeur extérieure ne change pas.| Syntaxe | Signification | Exemple |
|---|---|---|
local v=… | Créer une variable valide seulement dans la fonction | local step=1 |
v=… | Une variable valide dans tout le script | status=ready |
Renvoyer un succès ou un échec — return et $?
Une fonction peut renvoyer un code de sortie avec return N.
Par convention 0 signifie succès et toute valeur autre que 0 signifie échec, et juste après l'appel tu peux vérifier cette valeur avec $?.
Brancher directement sur le succès d'une fonction comme if check "$x"; then ... rend le flux de validation et de traitement plus facile à lire.
is_num() {
case "$1" in
*[!0-9]*|"") return 1 ;; # échec s'il contient un caractère non numérique ou est vide
*) return 0 ;;
esac
}
is_num 12; echo "12 -> $?" # 12 -> 0
is_num abc; echo "abc -> $?" # abc -> 1
return entre dans $?, et if branche en traitant 0 comme un succès et une valeur non nulle comme un échec.| Syntaxe | Signification | Exemple |
|---|---|---|
return 0 | Quitter la fonction comme un succès | is_num 12; # success |
return 1 | Quitter la fonction comme un échec | is_num abc; # failure |
$? | Vérifier la valeur de retour de la fonction précédente | is_num 12; echo $? |
if name x; then … | Brancher directement sur la valeur de retour | if is_num "$v"; then …; fi |
Vérification des connaissances
Répondez à chaque question une par une.
Question 2Quelle est la portée d'une variable déclarée avec local ?
Question 3Lequel vérifie la valeur de retour de la fonction la plus récente ?