Introduction à la programmation Bash
Alex Scriven
Data Scientist
Passer des arguments à des fonctions se fait comme pour un script, avec la notation $1.
Vous avez aussi accès aux propriétés spéciales de ARGV vues plus tôt :
$1, $2, etc.$@ et $* donnent tous les arguments dans ARGV$# donne le nombre d'argumentsPassons des noms de fichiers comme arguments à une fonction pour illustrer. Nous allons les parcourir et les afficher.
function print_filename { echo "The first file was $1"for file in $@ do echo "This file has name $file" done }print_filename "LOTR.txt" "mod.txt" "A.py"
The first file was LOTR.txt
This file has name LOTR.txt
This file has name mod.txt
This file has name A.py
La « portée » en programmation désigne l'accessibilité d'une variable.
Pourquoi est-ce important ? Si vous tentez d'accéder à un élément à portée locale, le programme peut échouer avec une erreur !
Contrairement à la plupart des langages (p. ex. Python et R), toutes les variables sont globales par défaut en Bash.
function print_filename { first_filename=$1 }print_filename "LOTR.txt" "model.txt" echo $first_filename
LOTR.txt
Attention : la portée globale peut être risquée, car elle augmente les effets inattendus.
Utilisez le mot-clé local pour restreindre la portée d'une variable.
function print_filename { local first_filename=$1 }print_filename "LOTR.txt" "model.txt" echo $first_filename
Q : Pourquoi pas d'erreur, seulement une ligne vide ?
Réponse : first_filename a été associé au premier élément global d'ARGV ($1).
Le script a été lancé sans argument (bash script.sh), donc cet élément est vide par défaut. Soyez vigilant !
Nous savons comment faire entrer des arguments ; comment les récupérer ?
L'option return en Bash sert seulement à indiquer la réussite (0) ou l'échec (autres valeurs 1–255). Elle est capturée dans la variable globale $?
Nos options :
echo sur la dernière ligne de la fonction et capturer via une sous-invocation du shellVoyons une erreur de retour :
function function_2 { echlo # An error of 'echo' }function_2 # Call the function echo $? # Print the return value
script.sh: line 2: echlo: command not found
127
Que s'est-il passé ?
$? était 127 (erreur)Retournons correctement une valeur à réutiliser ailleurs dans le script avec echo et la capture par sous-shell :
function convert_temp { echo $(echo "scale=2; ($1 - 32) * 5 / 9" | bc) }converted=$(convert_temp 30) echo "30F in Celsius is $converted C"
30F in Celsius is -1.11 C
Introduction à la programmation Bash