Va

Variables en Bash

{one: "%{count} exercice", many: "%{count} d'exercices", other: "%{count} exercices"}

À propos de Variables

Variables

Les variables sont un endroit où l'on stocke des données. Bash possède deux types de données : les strings et les tableaux. On parlera des tableaux plus tard.

On affecte une variable comme ceci

name="value"
Note

Important : il ne doit y avoir aucun espace autour du signe égal !

Quand il y a des espaces, comme dans cet exemple,

x = 10

bash va appeler la commande x avec les deux arguments = et 10 !

On peut aussi appeler les variables des paramètres. Les deux termes seront utilisés de façon interchangeable dans ce document.

Parmi les paramètres importants utilisés ou définis par bash, on trouve :

  • PATH : une liste de répertoires séparés par des deux-points, utilisée pour trouver les commandes externes.
  • IFS : le « séparateur de champs interne ». On verra plus bas comment il est utilisé.
  • PWD : le répertoire de travail actuel. Sa valeur est la même que celle affichée par la commande pwd.
  • RANDOM : un entier pseudo-aléatoire compris entre 0 et 32767.
  • BASH_VERSION : la string de version de l'instance de bash en cours d'exécution.

Noms de variables

Un nom de variable se compose de lettres majuscules, de lettres minuscules, de chiffres et de tirets bas. Il ne peut pas commencer par un chiffre.

Caution

Il est recommandé d'éviter les noms de variables tout en majuscules. Le shell réserve cette convention à ses propres paramètres, et il vaut mieux ne pas écraser par accident des paramètres du shell qui ont une signification particulière. Par exemple : 1, 2, 3

Expansion de paramètres

On récupère la valeur d'un paramètre avec la syntaxe $varname.

x=10
echo "The value of x is $x"

Pour éviter que le nom de la variable soit confondu avec le texte qui l'entoure, on peut l'entourer d'accolades. Par exemple, pour afficher la string 10x10 :

echo "${x}x$x"
# or
echo "${x}x${x}"

Certains guides de style recommandent d'utiliser des accolades dans la plupart des cas, pour la lisibilité ou la cohérence.

Paramètres positionnels

Comme on l'a vu dans la leçon Commandes et arguments, les commandes peuvent prendre des arguments. Les scripts bash ne font pas exception. Les arguments passés à l'instance de bash en cours d'exécution sont appelés des paramètres positionnels. On peut les récupérer grâce à ces paramètres spéciaux :

  • $1 : le premier paramètre positionnel
  • $2 ... $9 : les paramètres suivants
  • ${10} ... : au-delà d'un chiffre, les accolades sont obligatoires.
  • $0 : le nom du script en cours.

Les arguments d'une fonction shell sont eux aussi des paramètres positionnels, traités exactement de la même façon. On verra les fonctions plus en détail dans une leçon ultérieure.

Paramètres positionnels spéciaux

Il existe des paramètres spéciaux qui facilitent la manipulation des paramètres positionnels.

  • $# donne le nombre de paramètres positionnels.
  • "$@" donne la liste de tous les paramètres positionnels, chacun sous forme de mot séparé.
  • "$*" donne une seule string contenant tous les paramètres positionnels, reliés entre eux par un caractère.
    • Le caractère de liaison est le premier caractère de la variable $IFS, qui est un espace par défaut.

"$@" est la façon la plus sûre de passer des paramètres positionnels à une autre commande tout en les protégeant par des guillemets. C'est aussi ce que tu utiliseras pour parcourir les paramètres positionnels :

for arg in "$@"; do
    do_something_with "$arg"
done

En pratique, "$@" est utilisé plus souvent que "$*".

Substitution de commandes

Une opération très fréquente dans les scripts bash consiste à capturer la sortie d'une commande pour la stocker dans une variable. Pour cela, on utilise la substitution de commandes.

var=$(command)

Par exemple, pour mettre une string en majuscules, on peut faire ceci :

text="Hello world!"
uppercase=$(echo "$text" | tr '[:lower:]' '[:upper:]')
echo "$uppercase"
# => HELLO WORLD!

Pour aller plus loin avec l'expansion de paramètres

Bash dispose de nombreuses fonctionnalités intégrées pour manipuler les variables et les strings, afin de ne pas avoir à faire appel à des commandes externes.

  • Mettre du texte en majuscules. Dans la section précédente, on a vu comment utiliser tr pour mettre du texte en majuscules. En bash, cela donne :

    echo "${text^^}"
    

    De même, ${text,,} met la valeur en minuscules.

  • Fournir une valeur par défaut si la variable est vide.

    default="nothing here"
    result=""
    echo "${result:-$default}"
    # => nothing here
    
  • Rechercher et remplacer.

    text="Hello world!"
    echo "${text//[aeiou]/X}"
    # => HXllX wXrld!"
    

Il existe bien d'autres expansions de paramètres intéressantes : extraire une sous-chaîne, obtenir la longueur d'une string, affecter une valeur par défaut, supprimer du texte au début ou à la fin de la valeur, et bien d'autres. Pour en savoir plus, consulte le manuel.

Modifie via GitHub Le lien s'ouvre dans une nouvelle fenêtre ou un nouvel onglet