Variables bash

De system.co.free.fr.
(Différences entre les versions)
(Définir une variable uniquement si elle est indéfinie ou nul)
(Définir une variable uniquement si elle est indéfinie ou nul)
 
(3 versions intermédiaires masquées)
Ligne 236 : Ligne 236 :
unset VAR # VAR n'est pas défini
unset VAR # VAR n'est pas défini
echo ${VAR=valeur_par_defaut}
echo ${VAR=valeur_par_defaut}
 +
</pre>
 +
<pre>
 +
valeur_par_defaut
 +
</pre>
 +
<br>
 +
==Définir une variable uniquement si elle est indéfinie ou nul==
 +
définir VAR lorsque nul :<br>
 +
<pre>
 +
VAR=               # défini VAR a nul
 +
echo ${VAR:=valeur_par_defaut}
</pre>
</pre>
<pre>
<pre>
Ligne 258 : Ligne 268 :
echo ${VAR?pas definie} # rien, valeur nulle autorisée
echo ${VAR?pas definie} # rien, valeur nulle autorisée
echo ${VAR:?valeur nulle} # -bash: VAR: pas definie (sur stderr)
echo ${VAR:?valeur nulle} # -bash: VAR: pas definie (sur stderr)
-
 
-
==Définir une variable uniquement si elle est indéfinie ou nul==
 
-
<pre>
 
-
VAR=${VAR:=valeur_par_defaut} # VAR prend la valeur
 
-
# valeur_par_defaut
 
-
</pre>
 

Version actuelle en date du 8 novembre 2020 à 08:15

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)

Outils personnels