Arguments, valeurs de retour et portée

Introduction au scripting Bash

Alex Scriven

Data Scientist

Passer des arguments à des fonctions Bash

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 :

  • Chaque argument est accessible via la notation $1, $2.
  • $@ et $* renvoient tous les arguments dans ARGV
  • $# renvoie le nombre d'arguments
Introduction au scripting Bash

Exemple de passage d'arguments

Passons 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
Introduction au scripting Bash

Scope in programming

 

La « portée » en programmation indique où une variable est accessible.

  • « Globale » : accessible partout dans le programme, y compris dans les boucles FOR, les IF, les fonctions, etc.
  • « Locale » : accessible seulement dans une partie du programme.

Pourquoi est-ce important ? Si vous tentez d'accéder à quelque chose de portée locale, le programme peut échouer avec une erreur !

Introduction au scripting Bash

Portée dans les fonctions Bash

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.

Introduction au scripting Bash

Restreindre la portée dans les fonctions Bash

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 !

Introduction au scripting Bash

Valeurs de retour

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 :

  1. Affecter une variable globale
  2. echo de la valeur voulue (en dernière ligne de la fonction) et capture via une sous-shell
Introduction au scripting Bash

Une erreur de retour

Voyons 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é ?

  1. Une erreur s'est produite lors de l'appel de la fonction
    • Le script a cherché « echlo » comme programme, mais il n'existait pas
  2. La valeur de retour dans $? était 127 (erreur)
Introduction au scripting Bash

Retourner correctement

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
  • Remarquez : plus besoin de variable intermédiaire.
Introduction au scripting Bash

Passons à la pratique !

Introduction au scripting Bash

Preparing Video For Download...