Arguments, valeurs de retour et portée

Introduction à la programmation Bash

Alex Scriven

Data Scientist

Passer des arguments à des fonctions Bash

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 :

  • Chaque argument est accessible via $1, $2, etc.
  • $@ et $* donnent tous les arguments dans ARGV
  • $# donne le nombre d'arguments
Introduction à la programmation Bash

Exemple : passage d'arguments

Passons 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
Introduction à la programmation Bash

La portée en programmation

 

La « portée » en programmation désigne l'accessibilité d'une variable.

  • « 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 à un élément à portée locale, le programme peut échouer avec une erreur !

Introduction à la programmation 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 les effets inattendus.

Introduction à la programmation Bash

Restreindre la portée dans les fonctions Bash

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 !

Introduction à la programmation Bash

Valeurs de retour

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 :

  1. Affecter une variable globale
  2. echo sur la dernière ligne de la fonction et capturer via une sous-invocation du shell
Introduction à la programmation 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 est survenue lors de l'appel de la fonction
    • Le script a tenté d'exécuter « echlo », qui n'existe pas
  2. La valeur de retour dans $? était 127 (erreur)
Introduction à la programmation Bash

Retourner correctement

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
  • Remarquez : plus d'utilisation d'une variable intermédiaire.
Introduction à la programmation Bash

Passons à la pratique !

Introduction à la programmation Bash

Preparing Video For Download...