Variables bash

De system.co.free.fr.
(Différences entre les versions)
(Renvoyer une valeur de substitution lorsque la variable n'existe pas)
(Renvoyer une valeur de substitution lorsque la variable n'existe pas)
Ligne 191 : Ligne 191 :
==Renvoyer une valeur de substitution lorsque la variable n'existe pas==
==Renvoyer une valeur de substitution lorsque la variable n'existe pas==
-
si VAR est défini (avec une valeur ou avec null), on retourne sa valeur, y compris null, sinon, si VAR est indéfini, on retourne défaut, sans changer ni la valeur, ni l’état de VAR.  
+
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.  
<pre>
<pre>
unset VAR                # on supprime VAR si elle existe
unset VAR                # on supprime VAR si elle existe
Ligne 200 : Ligne 200 :
</pre>
</pre>
-
Si l'on souhaite que la valeur retournée soit non nulle, on peut utiliser la syntaxe : <b>${VAR:-defaut}</b>.
+
Si l'on souhaite que la valeur retournée soit non nul, on peut utiliser la syntaxe : <b>${VAR:-defaut}</b>.
Par exemple :
Par exemple :
<pre>
<pre>
-
declare VAR # VAR existe, mais est nulle
+
declare VAR # VAR existe, mais est nul
echo ${VAR-valeur_par_defaut}
echo ${VAR-valeur_par_defaut}
</pre>
</pre>
Ligne 218 : Ligne 218 :
-
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 :
+
Pour substituer une valeur (ici une chaîne: defaut) a une variable indéfinie:<br>
 +
<pre>
 +
${VAR-defaut}
 +
</pre>
 +
<br>
 +
Pour substituer une valeur (ici une chaîne: defaut) a une variable indéfinie ou nul: <br>
 +
<pre>
 +
${VAR:-defaut}
 +
</pre>
 +
<br>
 +
Cette syntaxe ne défini pas ou ne modifie pas la valeur de VAR.
-
declare VAR # VAR existe, mais est nulle
+
==Définir une variable uniquement si elle est indéfinie==
-
echo ${VAR=valeur_par_defaut} # rien, VAR reste nulle
+
définir VAR si elle n'est pas définie :<br>
 +
<pre>
 +
unset VAR # VAR n'est pas défini
 +
echo ${VAR=valeur_par_defaut}
 +
</pre>
 +
<pre>
 +
valeur_par_defaut
 +
</pre>
 +
<br>
 +
 
 +
==Définir une variable uniquement si elle est indéfinie ou nul==
 +
<pre>
echo ${VAR:=valeur_par_defaut} # VAR prend la valeur
echo ${VAR:=valeur_par_defaut} # VAR prend la valeur
# valeur_par_defaut
# valeur_par_defaut

Version du 8 novembre 2020 à 07:50

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

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)
Outils personnels