Variables bash

De system.co.free.fr.

Sommaire

Variables bash

Manipulations des variables en Bash

Les exemples ci-dessous sont réalisés avec une variable nommée VAR.

Longueur en caractères

VAR=azerty 
echo ${#VAR} 
6

Nombre éléments d'un tableau

VAR=( un deux trois quatre )
echo ${#VAR[@]}
4

Longueur d'un élément d'un tableau

VAR=( un deux trois quatre )
echo ${#VAR[0]}
2

supprimer les n premiers caractères (1er caractère = numero 0 )

chaine caracteres a z e r t y
numero de caractère 0 1 2 3 4 5
VAR=azerty
echo ${VAR:3}
rty

extraire une chaine de caractères en partant du debut

avec ${Variable:debut:longueur}
debut=3
longueur=4

chaine caracteres a z e r t y u i o p
numero de caractère 0 1 2 3 4 5 6 7 8 9
decompte de la longueur - - - 1 2 3 4 - - -
r t y u
VAR=azertyuiop
echo ${VAR:3:4}
rtyu

extraire une chaine de caractères avec un position en partant de la fin

avec ${Variable:fin:longueur}
fin=(-8)
longueur=5

chaine caracteres a z e r t y u i o p
numero de caractère -10 -9 -8 -7 -6 -5 -4 -3 -2 -1
decompte de la longueur - - 1 2 3 4 5 - - -
e r t y u
VAR=azertyuiop
echo ${VAR:(-8):5}
ertyu

Suppression de la plus courte chaîne recherché, en partant du début

chaine caracteres a z e r E c h e r c h e t y U
recherche et suppression - - - r E c h e r c h e - - -
resultat a z e t y U


VAR=azerEcherchetyu
${VAR#rEcherche}
azetyU


VAR=AZERTYUIOPQSD
echo ${VAR#A*R}		# A*R correspond ici a AZER
TYUIOPQSD

la caractère "*" est le caractère générique qui remplace tous les caractères.


VAR=ABABAB_TOTO echo ${VAR#[AB][AB][AB][AB]} # AB_TOTO

Suppression de la plus longue chaine, a partir du début

VAR=ABCABC123ABCabc
echo ${VAR##A*C}
abc

Recherche et suppression de la plus courte chaine en partant de la fin

VAR=abcABC123ABCabc echo ${VAR%b*c} # abcABC123ABCa

- Suppression du plus long morceau correspondant, en partant de la fin de la chaîne ${VAR%%recherche}:

VAR=abcABC123ABCabc echo ${VAR%%b*c} # a

Bien chercher-remplacer dans sa variable.

Bash propose aussi 4 types de remplacement dans le contenu des variables. Ces remplacements peuvent se faire sur la première occurrence trouvée, ou sur toutes les occurrences. Les syntaxes suivantes gèrent respectivement ces deux cas :

${VAR/recherche/remplacement} # première occurrence ${VAR//recherche/remplacement} # toutes les occurrences

Dans tous les cas, c'est le morceau le plus grand correspondant à "recherche" qui sera remplacé. Ainsi, on aura :

VAR=abcABC123ABCabc echo ${VAR/b*c/Z} # aZ

On peut aussi viser spécifiquement le début ou la fin d'une chaîne :

VAR=abcABC123ABCabc echo ${VAR/#abc/---} # ---ABC123ABCabc echo ${VAR/%abc/---} # abcABC123ABC---

Bien définir sa variable.

Pour les cas où les variables doivent être étroitement surveillées, on dispose de quelques outils permettant par exemple de leur donner une valeur par défaut, ou de retourner une erreur quand elles ne sont pas définies.

On sait déjà que la forme ${VAR} retourne la valeur de VAR. Mettons maintenant qu'on veuille utiliser une valeur par défaut quand la valeur de VAR n'est pas définie. On peut écrire : ${VAR-defaut}. dans ce cas, si VAR existe (nulle ou pas), on retourne sa valeur, sinon, on retourne la valeur defaut, sans changer la valeur de VAR.

Si on veut que la valeur retournée soit non nulle, on peut utiliser la syntaxe : ${VAR:-defaut}.

Par exemple :

declare VAR # VAR existe, mais est nulle echo ${VAR-valeur_par_defaut} # rien echo ${VAR:-valeur_par_defaut} # valeur_par_defaut

unset VAR # VAR n'est plus définie echo ${VAR-valeur_par_defaut} # valeur_par_defaut echo ${VAR:-valeur_par_defaut} # valeur_par_defaut

Donc, si null est une valeur possible pour une variable, il convient d'utiliser la syntaxe ${VAR-defaut} qui respectera la valeur nulle. Sinon, il est plus sage d'utiliser ${VAR:-defaut}.

Il faut bien ce souvenir que cette syntaxe ne défini à aucun moment la valeur de VAR. C'est le rôle de la syntaxe ci dessous de définir VAR si elle n'est pas définie :

declare VAR # VAR existe, mais est nulle echo ${VAR=valeur_par_defaut} # rien, VAR reste nulle echo ${VAR:=valeur_par_defaut} # VAR prend la valeur # valeur_par_defaut

Si on veut maintenant utiliser une autre valeur, fixe, quand VAR est définie, sans pour autant modifier la valeur réelle de VAR, on peut procéder comme cela :

VAR=valeur_1 echo ${VAR+autre_valeur} # autre_valeur VAR= # null echo ${VAR+autre_valeur} # autre_valeur echo ${VAR:+autre_valeur} # rien

Dernier cas maintenant : on veut utiliser la valeur de VAR, mais on veut retourner un message d'erreur si la valeur est nulle ou si VAR n'est pas définie. On peut alors procéder comme cela :

unset VAR # VAR n'est pas définie echo ${VAR?pas definie} # -bash: VAR: pas definie (sur stderr)

VAR= # définie mais vide, null echo ${VAR?pas definie} # rien, valeur nulle autorisée echo ${VAR:?valeur nulle} # -bash: VAR: pas definie (sur stderr)

Bon, j'ai conscience que cela est plutôt indigeste, n'hésitez pas à poser vos questions et faire part de vos remarques.

Outils personnels