Comment gérer l'expansion des variables de bash vides ou non

Comment gérer l'expansion des variables de bash vides ou non

Objectif

L'objet de ce didacticiel est d'apprendre à modifier le comportement de bash lors de l'expansion des variables non set ou vides en utilisant une syntaxe dédiée.

Exigences

  • Aucun privilège de système spécial n'est nécessaire pour suivre ce tutoriel

Introduction

Les variables, l'extension est l'une des caractéristiques les plus courantes utilisées dans le shell: lorsqu'une variable existe et fait partie d'une commande, elle est «élargie», de sorte qui est remplacée par sa valeur. L'expansion des variables vides, est l'une de ces choses, qui, si elle n'est pas bien gérée, pourrait causer de graves dommages à un système: imaginez une commande comme celle-ci:

$ sudo rm -rf "/ $ dir"

Dans un cas comme celui-ci, si le $ dir La variable est vide ou non définie, son expansion ne produirait aucune valeur, donc la commande réelle exécutée serait:

$ sudo rm -rf /

Notre système serait condamné. Traiter, ou mieux empêcher une situation comme celle-ci, c'est d'une importance vitale. Dans ce tutoriel, nous verrons comment gérer l'expansion des variables vides en utilisant une syntaxe spécifique à bash.



Utilisez une valeur par défaut si une variable est vide ou non

Le premier cas que nous prenons en compte est lorsqu'une variable non définie ou vide est référencée dans une expansion et que nous voulons utiliser une valeur de secours / par défaut à sa place. Supposons que nous faisons référence à la $ couleur variable dans le cadre de la commande suivante:

$ echo "Le ciel est $ couleur"

Le résultat de cette commande serait:

le ciel est

Comme prévu, comme la variable n'est pas définie, rien ne résulte de son expansion, nous laissant avec une phrase inachevée (et un ciel sans couleur). Pas de vrai mal dans ce cas, bien sûr, mais comment pourrions-nous demander au shell d'utiliser une valeur par défaut dans un cas comme celui-ci?

Il existe une syntaxe spécialement conçue pour obtenir ce comportement, et c'est très simple:

$ paramètre: -word

Voici comment cela fonctionne:

$ echo "Le ciel est $ couleur: -" bleu "" Le ciel est bleu 

Lorsque vous utilisez cette syntaxe, si paramètre n'existe pas ou est vide, l'expansion entraînera la valeur de mot. Dans ce cas, la variable $ couleur n'a pas été réglé, donc la coque a utilisé le «bleu» à la suite de l'expansion.

Il convient de remarquer que même si l'expansion a entraîné la valeur spécifiée comme «par défaut», avec cette syntaxe, après l'expansion, la $ couleur La variable sera toujours non set:

$ echo "$ couleur" 

Utiliser et également attribuer une nouvelle valeur si une variable est vide ou non

La commande ci-dessus n'a renvoyé aucune sortie, car la variable, à ce moment-là, n'était toujours pas définie. Et si nous voulons utiliser une valeur spécifiée lors de l'expansion d'une variable non set ou vide, mais attribuez également cette valeur à la variable après l'expansion? Une syntaxe légèrement différente nous a permis de réaliser ce que nous voulons:

$ paramètre: = word

Voyons un exemple dans lequel cette syntaxe est utilisée:

$ echo "Le ciel est $ couleur: =" bleu "" Le ciel est bleu 

Tout comme s'est produit avant, mot a été utilisé dans l'expansion, depuis paramètre (le $ couleur variable) n'était pas défini. En outre, mot, («Bleu» dans ce cas), a également été attribué comme valeur à la variable précédemment non. Vérifier c'est très facile:

$ "Le ciel est $ couleur" le ciel est bleu 

Voir? L'expansion du $ couleur La variable se traduit désormais en «bleu».



Utilisez une autre valeur si une variable est définie

Une syntaxe légèrement différente nous a permis d'obtenir un résultat encore différent, ici, c'est:

Paramètre: + Word

Comment modifie-t-il le comportement du shell? Lorsque cette syntaxe est utilisée, si paramètre est vide ou pas réglé, mot sera pas être utilisé, donc l'expansion sera vide. Si, au lieu de cela, la variable a une valeur, le résultat de l'expansion sera mot, et la valeur de paramètre ne sera pas modifié. Clarifions cela avec quelques exemples:

Premier cas. La variable $ couleur n'est pas défini, donc le résultat de l'expansion ne sera rien:

$ echo "Le ciel est $ couleur: +" bleu "" Le ciel est 

Deuxième cas. La variable $ couleur a une valeur: l'expansion entraînera la valeur spécifiée au droit de :+, mais la valeur du $ couleur la variable ne sera pas modifiée:

# Attribuez une valeur à la variable "Color" $ color = "Red" # Étant donné que la variable est définie, le résultat de l'expansion sera "bleu" $ echo "Le ciel est $ Color: +" Blue "" Sky est bleu # La valeur de la variable "couleur" n'a pas été modifiée $ echo "$ couleur" rouge 
Copie

Afficher un message d'erreur si une variable est vide ou non

Le dernier type de syntaxe que nous examinerons ici est:

$ paramètre:?mot

Lorsque vous utilisez cette syntaxe, si paramètre n'est pas défini ou vide, le script sortira avec erreur. En outre, mot sera envoyé à stderr (erreur standard). Pour le bien de cet exemple, considérez la variable «couleur» comme non comme avant:

# Le message que nous avons spécifié s'affiche à l'erreur standard $ echo "Le ciel est $ couleur:?"Couleur pas définie" "bash: couleur: couleur non définie 
Copie

La commande est sortie avec une erreur et le couleur non réglée Le message a été affiché. Dans le cas où la variable a été définie, le résultat de l'expansion serait sa propre valeur:

$ color = "bleu" $ echo "Le ciel est $ couleur:?"Couleur pas définie" "Le ciel est bleu 
Copie

Tutoriels Linux connexes:

  • Système linux hung? Comment s'échapper vers la ligne de commande et…
  • Variables de bash spéciaux avec des exemples
  • Mint 20: Mieux que Ubuntu et Microsoft Windows?
  • Fichiers de configuration Linux: 30 premiers
  • Scripting de bash: Vérifiez si le répertoire existe
  • Choses à faire après l'installation d'Ubuntu 22.04 Jammy Jellyfish…
  • Choses à faire après l'installation d'Ubuntu 20.04 Focal Fossa Linux
  • Commandes Linux: les 20 meilleures commandes les plus importantes que vous devez…
  • Comment gérer l'histoire de bash
  • Ubuntu 20.04 Guide