(→Suppression de la plus courte chaîne recherché, en partant du début) |
(→Définir une variable uniquement si elle est indéfinie ou nul) |
||
(27 versions intermédiaires masquées) | |||
Ligne 1 : | Ligne 1 : | ||
- | + | =Variables bash= | |
- | + | Extrait de [https://www.patpro.net/blog/index.php/2006/04/07/20-manipulations-sur-les-variables-dans-bash/ https://www.patpro.net/blog/index.php/2006/04/07/20-manipulations-sur-les-variables-dans-bash/] | |
- | Les exemples ci-dessous sont réalisés avec une variable nommée '''VAR'''. | + | Manipulations des variables en Bash |
+ | <br> | ||
+ | Les exemples ci-dessous sont réalisés avec une variable nommée '''VAR'''.<br> | ||
+ | le caractère générique "*", peut être utilisé, et remplace 1 ou plusieurs caractères différents.<br> | ||
- | + | ==Longueur de la variable== | |
<pre> | <pre> | ||
VAR=azerty | VAR=azerty | ||
Ligne 12 : | Ligne 15 : | ||
<pre>6</pre> | <pre>6</pre> | ||
- | + | ==Nombre éléments d'un tableau== | |
<pre> | <pre> | ||
VAR=( un deux trois quatre ) | VAR=( un deux trois quatre ) | ||
Ligne 19 : | Ligne 22 : | ||
<pre>4</pre> | <pre>4</pre> | ||
- | + | ==Longueur d'un élément d'un tableau== | |
<pre> | <pre> | ||
VAR=( un deux trois quatre ) | VAR=( un deux trois quatre ) | ||
Ligne 26 : | Ligne 29 : | ||
<pre>2</pre> | <pre>2</pre> | ||
- | + | ==supprimer les n premiers caractères (1er caractère = numero 0 )== | |
{| class="wikitable" | {| class="wikitable" | ||
|chaine caracteres || a || z || e || r || t || y | |chaine caracteres || a || z || e || r || t || y | ||
Ligne 39 : | Ligne 42 : | ||
<pre>rty</pre> | <pre>rty</pre> | ||
- | + | ==extraire une chaine de caractères en partant du debut== | |
avec ${Variable:debut:longueur} <br> | avec ${Variable:debut:longueur} <br> | ||
debut=3<br> | debut=3<br> | ||
Ligne 58 : | Ligne 61 : | ||
<pre>rtyu</pre> | <pre>rtyu</pre> | ||
- | + | ==extraire une chaine de caractères avec un position en partant de la fin== | |
avec ${Variable:fin:longueur} <br> | avec ${Variable:fin:longueur} <br> | ||
Ligne 78 : | Ligne 81 : | ||
<pre>ertyu</pre> | <pre>ertyu</pre> | ||
- | + | ==Suppression de la plus courte chaîne recherché, en partant du début== | |
Ligne 96 : | Ligne 99 : | ||
azetyU | azetyU | ||
</pre> | </pre> | ||
+ | <br> | ||
+ | le caractère "*" est un caractère générique qui remplace 1 ou plusieurs caractères differents. | ||
<br> | <br> | ||
<pre> | <pre> | ||
Ligne 104 : | Ligne 109 : | ||
TYUIOPQSD | TYUIOPQSD | ||
</pre> | </pre> | ||
- | + | <br> | |
- | + | [AB] signifie le caractère A ou le caractère B<br> | |
- | + | [AB[AB][AB][AB] signifie 4 caractères ( A ou B) qui se suivent | |
- | + | <br> | |
+ | <pre> | ||
VAR=ABABAB_TOTO | VAR=ABABAB_TOTO | ||
- | echo ${VAR#[AB][AB][AB][AB]} | + | echo ${VAR#[AB][AB][AB][AB]} |
+ | </pre> | ||
+ | <pre> | ||
+ | AB_TOTO | ||
+ | </pre> | ||
+ | <br> | ||
- | + | ==Suppression de la plus longue chaine, a partir du début== | |
<pre> | <pre> | ||
Ligne 121 : | Ligne 132 : | ||
</pre> | </pre> | ||
- | + | ==Recherche et suppression de la plus courte chaîne en partant de la fin== | |
- | + | ||
+ | <pre> | ||
VAR=abcABC123ABCabc | VAR=abcABC123ABCabc | ||
- | echo ${VAR%b*c} | + | echo ${VAR%b*c} |
+ | </pre> | ||
+ | <pre> | ||
+ | abcABC123ABCa | ||
+ | </pre> | ||
- | + | ==Suppression de la plus longue chaîne en partant de la fin== | |
+ | ${VAR%%recherche}: | ||
+ | |||
+ | <pre> | ||
VAR=abcABC123ABCabc | VAR=abcABC123ABCabc | ||
- | echo ${VAR%%b*c} | + | echo ${VAR%%b*c} |
+ | </pre> | ||
+ | <pre> | ||
+ | a | ||
+ | </pre> | ||
- | + | ==chercher et remplacer une sous-chaîne dans une variable== | |
- | + | Il y a 2 possibilités: la première occurrence ou toutes les occurrences: | |
- | + | <pre> | |
- | + | ${VAR/recherche/remplacé par} # première occurrence | |
- | ${VAR/recherche/ | + | ${VAR//recherche/remplacé par} # toutes les occurrences |
- | ${VAR//recherche/ | + | </pre> |
- | + | <br> | |
- | Dans tous les cas, c'est | + | Dans tous les cas, c'est la sous-chaîne la plus grande correspondant à "recherche" qui sera remplacée. <br> |
+ | <pre> | ||
+ | VAR=abcABC123ABCabc | ||
+ | echo ${VAR/b*c/Z} | ||
+ | </pre> | ||
+ | <pre> | ||
+ | aZ | ||
+ | </pre> | ||
+ | ===chercher et remplacer la première sous-chaîne d'une variable=== | ||
+ | <pre> | ||
VAR=abcABC123ABCabc | VAR=abcABC123ABCabc | ||
- | echo ${VAR/ | + | echo ${VAR/#abc/---} |
- | + | </pre> | |
- | + | <pre> | |
+ | ---ABC123ABCabc | ||
+ | </pre> | ||
+ | ===chercher et remplacer dernière sous-chaîne d'une variable=== | ||
+ | <pre> | ||
VAR=abcABC123ABCabc | VAR=abcABC123ABCabc | ||
- | echo ${VAR/ | + | echo ${VAR/%abc/---} |
- | + | </pre> | |
+ | <pre> | ||
+ | abcABC123ABC--- | ||
+ | </pre> | ||
- | + | ==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. | |
+ | <pre> | ||
+ | unset VAR # on supprime VAR si elle existe | ||
+ | echo ${VAR-defaut} | ||
+ | </pre> | ||
+ | <pre> | ||
+ | defaut | ||
+ | </pre> | ||
- | + | 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> | ||
+ | declare VAR # VAR existe, mais est nul | ||
+ | echo ${VAR-valeur_par_defaut} | ||
+ | </pre> | ||
+ | <pre> | ||
- | + | </pre> | |
- | + | <pre> | |
- | echo ${VAR:-valeur_par_defaut} | + | echo ${VAR:-valeur_par_defaut} |
+ | </pre> | ||
+ | <pre> | ||
+ | valeur_par_defaut | ||
+ | </pre> | ||
- | |||
- | |||
- | |||
- | |||
- | + | 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. | ||
- | + | ==Définir une variable uniquement si elle est indéfinie== | |
- | echo ${VAR=valeur_par_defaut} # | + | définir VAR si elle n'est pas définie :<br> |
- | echo ${VAR:=valeur_par_defaut} | + | <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== | ||
+ | définir VAR lorsque nul :<br> | ||
+ | <pre> | ||
+ | VAR= # défini VAR a nul | ||
+ | echo ${VAR:=valeur_par_defaut} | ||
+ | </pre> | ||
+ | <pre> | ||
+ | valeur_par_defaut | ||
+ | </pre> | ||
+ | <br> | ||
- | + | ==remplacer momentanément la valeur d'une variable non nul== | |
VAR=valeur_1 | VAR=valeur_1 | ||
Ligne 194 : | 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) | ||
- | |||
- |
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.
VAR=azerty echo ${#VAR}
6
VAR=( un deux trois quatre ) echo ${#VAR[@]}
4
VAR=( un deux trois quatre ) echo ${#VAR[0]}
2
chaine caracteres | a | z | e | r | t | y |
numero de caractère | 0 | 1 | 2 | 3 | 4 | 5 |
VAR=azerty echo ${VAR:3}
rty
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
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
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
VAR=ABCABC123ABCabc echo ${VAR##A*C}
abc
VAR=abcABC123ABCabc echo ${VAR%b*c}
abcABC123ABCa
${VAR%%recherche}:
VAR=abcABC123ABCabc echo ${VAR%%b*c}
a
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
VAR=abcABC123ABCabc echo ${VAR/#abc/---}
---ABC123ABCabc
VAR=abcABC123ABCabc echo ${VAR/%abc/---}
abcABC123ABC---
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 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 VAR lorsque nul :
VAR= # défini VAR a nul echo ${VAR:=valeur_par_defaut}
valeur_par_defaut
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)