Variables bash

De system.co.free.fr.

Sommaire

Variables bash

Extrait de https://www.patpro.net/blog/index.php/2006/04/07/20-manipulations-sur-les-variables-dans-bash/

Manipulations des variables en Bash
Les exemples ci-dessous sont réalisés avec une variable nommée VAR.
le caractère générique "*", peut être utilisé, et remplace 1 ou plusieurs caractères différents.

Longueur de la variable

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


le caractère "*" est un caractère générique qui remplace 1 ou plusieurs caractères differents.

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


[AB] signifie le caractère A ou le caractère B
[AB[AB][AB][AB] signifie 4 caractères ( A ou B) qui se suivent

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 chaîne en partant de la fin

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

Suppression de la plus longue chaîne en partant de la fin

${VAR%%recherche}:

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

chercher et remplacer une sous-chaîne dans une variable

Il y a 2 possibilités: la première occurrence ou toutes les occurrences:

${VAR/recherche/remplacé par}	# première occurrence
${VAR//recherche/remplacé par}	# toutes les occurrences


Dans tous les cas, c'est la sous-chaîne la plus grande correspondant à "recherche" qui sera remplacée.

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

chercher et remplacer la première sous-chaîne d'une variable

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

chercher et remplacer dernière sous-chaîne d'une variable

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

Renvoyer une valeur de substitution lorsque la variable n'existe pas

si VAR est défini (avec une valeur ou avec nul), on retourne sa valeur, y compris nul, sinon, si VAR est indéfini, on retourne défaut, sans changer ni la valeur, ni l’état de VAR.

unset VAR                # on supprime VAR si elle existe
echo ${VAR-defaut}	
defaut

Si l'on souhaite que la valeur retournée soit non nul, on peut utiliser la syntaxe : ${VAR:-defaut}.

Par exemple :

declare VAR			# VAR existe, mais est nul
echo ${VAR-valeur_par_defaut}

echo ${VAR:-valeur_par_defaut}
valeur_par_defaut


Pour substituer une valeur (ici une chaîne: defaut) a une variable indéfinie:

${VAR-defaut}


Pour substituer une valeur (ici une chaîne: defaut) a une variable indéfinie ou nul:

${VAR:-defaut}


Cette syntaxe ne défini pas ou ne modifie pas la valeur de VAR.

Définir une variable uniquement si elle est indéfinie

définir VAR si elle n'est pas définie :

unset VAR			# VAR n'est pas défini
echo ${VAR=valeur_par_defaut}	
valeur_par_defaut


Définir une variable uniquement si elle est indéfinie ou nul

définir VAR lorsque nul :

VAR= 		               # défini VAR a nul
echo ${VAR:=valeur_par_defaut}	
valeur_par_defaut


remplacer momentanément la valeur d'une variable non nul

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)

Définir une variable uniquement si elle est indéfinie ou nul

VAR=${VAR:=valeur_par_defaut}	# VAR prend la valeur
				# valeur_par_defaut
Outils personnels