Les variables

Gestion des variables

Le shell interactif de l’utilisateur a des variables. Quand un fichier de commandes est exécuté, il est exécuté par une autre instanciation du shell, qui a elle aussi des variables. Ce fichier de commandes peut éventuellement appeler un autre fichier de commandes, exécuté par une autre instance du shell qui aura elle aussi des variables etc… Au cours de l’exécution d’un fichier de commandes on a donc un ensemble de shells qui se sont appelés mutuellement, chacun ayant des variables. Dans ce chapitre nous allons nous intéresser à la façon dont ces variables sont gérées.

gle 1

Toutes les variables sont locales à un shell : qu’elles soient exportées ou non, elles ne peuvent pas être modifiées par un sous-shell. Soit le fichier « setxy.sh » :

#!/bin/sh
x=10
y=20
x=1
y=2
> sh setxy.sh
echo $x $y
1 2

gle 2

Les variables exportées sont instanciées dans tous les sous-shells avec leur valeur.  Soit le fichier « printxy.sh » :

#!/bin/sh
echo "variables de printxy: x = $x y = $y"
printxy2

Et le fichier « printxy2.sh » :

#!/bin/sh
echo "variables de printxy2: x = $x y = $y"
x=1 ; export x
y=2 ; export y
> sh printxy.sh
variables de printxy: x = 1 y = 2
variables de printxy2: x = 1 y = 2

gle 3

Les variables exportées sont instanciées avec la valeur qu’elles ont dans le dernier shell qui les exporte.

Modifions printxy.sh pour lui faire modifier les valeurs de x et y et exporter seulement y.

#!/bin/sh
echo "variables de printxy: x = $x y = $y"
x=10
y=20 ; export y
sh printxy2.sh

« printxy2/sh » reste inchangé :

#!/bin/sh
echo "variables de printxy2: x = $x y = $y"
x=1; export x
y=2 ; export y
> sh printxy.sh
variables de printxy: x = 1 y = 2
variables de printxy2: x = 1 y = 20

Les tableaux

Le shell script permet aussi de gérer les tableaux de données. Les tableaux créés sont dynamiques, il n’est pas nécessaire de fixer leur taille a priori.

Les indices des tableaux sont comptés à partir de 0

La création d’un tableau est la suivante :

nom_tableau[n]=argument     affecte argument à l’élément « n » du tableau

echo ${nom_tableau[n]}                    affiche l’élément « n » du tableau

echo ${nom_tableau[*]}                    affiche tout le tableau

echo ${#nom_tableau[*]}                  affiche le nombre d’éléments du tableau.

Pour réaliser des traitements sur les variables, les plus intéressantes sont sans doute:

  • sed pour sa capacité de substitution.
  • awk pour sa capacité à traiter les champs d’une chaîne de caractères
  • cut pour sa capacité à couper selon des numéros de colonne.
  • tr pour sa capacité de transformation d’un caractère par un autre.
  • expr pour sa capacité de calculs arithmétiques.
  • wc pour sa capacité de comptage.
Print Friendly, PDF & Email