Bash : fonctions et tableaux

Déclarer et appeler une fonction, la portée de ses variables avec local, return contre echo, les tableaux indexés et associatifs et la lecture des options avec getopts : prévoir ce qu'affiche un script.

  • 32 cartes
  • 5 thèmes
  • Gratuit

Le programme, thème par thème

Le poids de chaque thème suit celui que lui donne l'examen.

  1. Notions
  2. Questions
  3. Ranger et relier
  4. Mises en situation
  5. Comprendre

Quelques cartes du deck

  • Fonction Bash : de quoi s'agit-il ?

    Voir la réponse

    Suite de commandes nommée, déclarée avec nom() { … }, qui reçoit ses arguments dans $1, $2, $# et $@ et s'appelle comme une commande.

    Les paramètres de la fonction masquent ceux du script le temps de l'appel : $1 dans la fonction n'est pas le $1 du script.

  • Qu'affiche ce script ?

    ```bash
    f() { local x=2; y=3; }
    x=1; y=1
    f
    echo $x $y
    `

    • 1 3
    • 2 3
    • 1 1
    • 2 1
    Voir la réponse

    1 3

    x est locale : l'appel ne touche pas le x du script, qui reste à 1. y est affectée sans local, donc globale : elle passe à 3.

  • Dans une fonction Bash, le mot-clé … limite une variable à la durée de l'appel ; sans lui, l'affectation est ….

    Voir la réponse

    Dans une fonction Bash, le mot-clé local limite une variable à la durée de l'appel ; sans lui, l'affectation est globale.

    f() { local x=2; y=3; } : après l'appel, x garde sa valeur d'avant et y vaut 3.

  • Variable locale : de quoi s'agit-il ?

    Voir la réponse

    Variable déclarée avec local dans une fonction : elle n'existe que pendant l'appel et ne touche pas une variable de même nom ailleurs.

    Sans local, toute affectation dans une fonction est globale : elle écrase la variable du script appelant, par exemple un compteur de boucle i.

  • Une fonction qui devait rendre le nom d'un fichier se termine par return $nom. L'exécution affiche return: rapport.txt: numeric argument required. Quelle correction est juste ?

    • Écrire return "$nom" entre guillemets
    • Écrire echo "$nom" et capter avec f=$(nom_fichier)
    • Déclarer la variable nom avec local avant le return
    • Écrire return 0 à la place, puis lire $?
    Voir la réponse

    Écrire echo "$nom" et capter avec f=$(nom_fichier)

    return n'accepte qu'un nombre : les guillemets n'y changent rien, local non plus. return 0 perdrait le nom. La sortie de la fonction est le bon canal pour un texte.