Introduction au scripting Bash
Alex Scriven
Data Scientist
Passer des arguments à des fonctions fonctionne comme pour un script, avec la notation $1.
Vous avez aussi accès aux propriétés spéciales de ARGV vues précédemment :
$1, $2.$@ et $* renvoient tous les arguments dans ARGV$# renvoie le nombre d'argumentsPassons des noms de fichiers en arguments d'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 indique où une variable est accessible.
Pourquoi est-ce important ? Si vous tentez d'accéder à quelque chose de 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 le risque d'effets indésirables.
Vous pouvez utiliser 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, juste une ligne vide ?
Réponse : first_filename a été affectée au premier élément global d'ARGV ($1).
Le script a été lancé sans arguments (bash script.sh) ; cela vaut donc un élément vide. Soyez vigilant !
Nous savons faire entrer des arguments ; comment en ressortir ?
L'option return en Bash sert uniquement à indiquer le succès (0) ou l'échec (autres valeurs 1–255) d'une fonction. Elle est capturée dans la variable globale $?
Nos options :
echo de la valeur voulue (en dernière ligne de la fonction) et capture via une sous-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 dans notre script avec echo et une capture via 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 au scripting Bash