Variables bash

De system.co.free.fr.
(Différences entre les versions)
(Variables bash)
(Suppression de la plus courte chaîne recherché, en partant du début)
Ligne 107 : Ligne 107 :
TYUIOPQSD
TYUIOPQSD
</pre>
</pre>
 +
<br>
le caractère "*" est un caractère générique qui remplace 1 ou plusieurs caractères differents.
le caractère "*" est un caractère générique qui remplace 1 ou plusieurs caractères differents.
-
 
+
<br>
-
 
+
<pre>
-
 
+
VAR=ABABAB_TOTO
VAR=ABABAB_TOTO
-
echo ${VAR#[AB][AB][AB][AB]} # AB_TOTO
+
echo ${VAR#[AB][AB][AB][AB]}
 +
</pre>
 +
<pre>
 +
AB_TOTO
 +
</pre>
 +
<br>
==Suppression de la plus longue chaine, a partir du début==
==Suppression de la plus longue chaine, a partir du début==

Version du 17 octobre 2020 à 16:04

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


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


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

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

</br> 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

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)

Outils personnels