Substitution de variables
De Linuxmemo.
(Page créée avec « Catégorie:Bash ==Astuces== for i in $(ls *.m4a);do avconv -i $i ${i/.m4a/.mp3} ;done ») |
(→Astuces) |
||
(12 versions intermédiaires masquées) | |||
Ligne 1 : | Ligne 1 : | ||
[[Catégorie:Bash]] | [[Catégorie:Bash]] | ||
+ | sources: http://casteyde.christian.free.fr/system/linux/guide/online/x3679.html | ||
+ | ==valeur par défaut== | ||
+ | valeur par défaut pour le cas où cette variable ne contient rien ou n'est pas définie | ||
+ | ${variable:-valeur} | ||
+ | Notez que la variable reste indéfinie après la substitution. | ||
+ | |||
+ | Pour fixer la valeur de la variable à cette valeur par défaut en plus d'effectuer la substitution | ||
+ | ${variable:=valeur} | ||
+ | |||
+ | ==message d'erreur== | ||
+ | un message d'erreur plutôt que de donner une valeur par défaut lorsqu'une variable n'est pas définie. | ||
+ | ${variable:?message} | ||
+ | |||
+ | ==tester== | ||
+ | tester si une variable est non définie et renvoyer une valeur spécifique si elle est définie | ||
+ | ${variable:+valeur} | ||
+ | où valeur est la valeur à renvoyer si la variable est définie. Si la variable n'est pas définie, la substitution sera faite avec la chaîne de caractères vide (l'expression complète sera donc supprimée). | ||
+ | |||
+ | ==position:longueur== | ||
+ | ${variable:position:longueur} | ||
+ | où position est la position à laquelle commence la sous-chaîne à extraire, et longueur est le nombre de caractères à extraire. | ||
+ | |||
+ | la présence du champ longueur est facultative. La sous-chaîne extraite sera constituée du reste de la valeur de la variable à partir de la position indiquée. | ||
+ | ${variable:position} | ||
+ | La position quant à elle doit être positive ou nulle. Une valeur négative indique un point de départ correspondant au nombre de caractères correspondant à partir de la droite de la valeur de la variable. | ||
+ | |||
+ | ==longueur d'une chaîne de caractères contenue dans une variable== | ||
+ | Si l'on veut obtenir la longueur d'une chaîne de caractères contenue dans une variable, on utilisera cette syntaxe : | ||
+ | ${#variable} | ||
+ | |||
+ | ==suppression de préfixe== | ||
+ | ${variable#préfixe} | ||
+ | lorsqu'on désire supprimer le plus petit préfixe possible correspondant au motif. | ||
+ | ou : | ||
+ | ${variable##préfixe} | ||
+ | permettra de supprimer le préfixe le plus long. | ||
+ | où variable est la variable contenant la chaîne de caractères à traiter, et préfixe est le préfixe à supprimer. | ||
+ | |||
+ | Par exemple, si la variable VAR contient la chaîne de caractères abbbc, la commande suivante : | ||
+ | echo ${VAR#a*b} | ||
+ | affichera la chaîne de caractères bbc, car le plus petit préfixe correspondant au motif a*b est ab. Inversement, la commande : | ||
+ | echo ${VAR##a*b} | ||
+ | utilisera le préfixe le plus long, à savoir abbb. Le résultat de cette substitution sera donc la chaîne de caractères c. | ||
+ | |||
+ | ==extraction des suffixes== | ||
+ | ${variable%suffixe} | ||
+ | lorsqu'on désire supprimer le plus petit suffixe possible correspondant au motif. | ||
+ | ou : | ||
+ | ${variable%%suffixe} | ||
+ | permettra de supprimer le préfixe le plus long. | ||
+ | où variable est la variable contenant la chaîne de caractères à traiter, et suffixe est le suffixe à supprimer. | ||
+ | |||
+ | Par exemple, si la variable VAR contient la chaîne de caractères abbbc, la commande suivante : | ||
+ | echo ${VAR%b*c} | ||
+ | affichera la chaîne de caractères abb, alors que la commande : | ||
+ | echo ${VAR%%b*c} | ||
+ | n'affichera que a. | ||
+ | |||
+ | ==recherche, remplacement, suppression== | ||
+ | recherche et de remplacement du shell dans les chaînes de caractères contenues dans des variables | ||
+ | ${variable/motif/remplacement} | ||
+ | Ce remplacement n'est donc effectué qu'une seule fois. Si l'on veut que toutes les occurrences du motif soient remplacées par la chaîne de remplacement, il suffit de doubler le premier / : | ||
+ | ${variable//motif/remplacement} | ||
+ | la présence du champ remplacement est facultative. Cela permet de supprimer purement et simplement les sous-chaînes de caractères qui correspondent au motif. | ||
+ | ${variable/motif} | ||
==Astuces== | ==Astuces== | ||
- | for i in $(ls *.m4a);do avconv -i $i ${i/.m4a/.mp3} ;done | + | convertir des fichiers audio: |
+ | for i in $(ls *.m4a);do avconv -i $i ${i/.m4a/.mp3} ; done | ||
+ | changer l’extension de fichiers | ||
+ | for i in *.txt ; do mv $i ${i/%.txt/.doc} ; done |
Version actuelle en date du 25 novembre 2017 à 22:28
sources: http://casteyde.christian.free.fr/system/linux/guide/online/x3679.html
Sommaire |
[modifier] valeur par défaut
valeur par défaut pour le cas où cette variable ne contient rien ou n'est pas définie
${variable:-valeur}
Notez que la variable reste indéfinie après la substitution.
Pour fixer la valeur de la variable à cette valeur par défaut en plus d'effectuer la substitution
${variable:=valeur}
[modifier] message d'erreur
un message d'erreur plutôt que de donner une valeur par défaut lorsqu'une variable n'est pas définie.
${variable:?message}
[modifier] tester
tester si une variable est non définie et renvoyer une valeur spécifique si elle est définie
${variable:+valeur}
où valeur est la valeur à renvoyer si la variable est définie. Si la variable n'est pas définie, la substitution sera faite avec la chaîne de caractères vide (l'expression complète sera donc supprimée).
[modifier] position:longueur
${variable:position:longueur}
où position est la position à laquelle commence la sous-chaîne à extraire, et longueur est le nombre de caractères à extraire.
la présence du champ longueur est facultative. La sous-chaîne extraite sera constituée du reste de la valeur de la variable à partir de la position indiquée.
${variable:position}
La position quant à elle doit être positive ou nulle. Une valeur négative indique un point de départ correspondant au nombre de caractères correspondant à partir de la droite de la valeur de la variable.
[modifier] longueur d'une chaîne de caractères contenue dans une variable
Si l'on veut obtenir la longueur d'une chaîne de caractères contenue dans une variable, on utilisera cette syntaxe :
${#variable}
[modifier] suppression de préfixe
${variable#préfixe} lorsqu'on désire supprimer le plus petit préfixe possible correspondant au motif.
ou :
${variable##préfixe} permettra de supprimer le préfixe le plus long.
où variable est la variable contenant la chaîne de caractères à traiter, et préfixe est le préfixe à supprimer.
Par exemple, si la variable VAR contient la chaîne de caractères abbbc, la commande suivante :
echo ${VAR#a*b}
affichera la chaîne de caractères bbc, car le plus petit préfixe correspondant au motif a*b est ab. Inversement, la commande :
echo ${VAR##a*b}
utilisera le préfixe le plus long, à savoir abbb. Le résultat de cette substitution sera donc la chaîne de caractères c.
[modifier] extraction des suffixes
${variable%suffixe} lorsqu'on désire supprimer le plus petit suffixe possible correspondant au motif.
ou :
${variable%%suffixe} permettra de supprimer le préfixe le plus long.
où variable est la variable contenant la chaîne de caractères à traiter, et suffixe est le suffixe à supprimer.
Par exemple, si la variable VAR contient la chaîne de caractères abbbc, la commande suivante :
echo ${VAR%b*c}
affichera la chaîne de caractères abb, alors que la commande :
echo ${VAR%%b*c}
n'affichera que a.
[modifier] recherche, remplacement, suppression
recherche et de remplacement du shell dans les chaînes de caractères contenues dans des variables
${variable/motif/remplacement}
Ce remplacement n'est donc effectué qu'une seule fois. Si l'on veut que toutes les occurrences du motif soient remplacées par la chaîne de remplacement, il suffit de doubler le premier / :
${variable//motif/remplacement}
la présence du champ remplacement est facultative. Cela permet de supprimer purement et simplement les sous-chaînes de caractères qui correspondent au motif.
${variable/motif}
[modifier] Astuces
convertir des fichiers audio:
for i in $(ls *.m4a);do avconv -i $i ${i/.m4a/.mp3} ; done
changer l’extension de fichiers
for i in *.txt ; do mv $i ${i/%.txt/.doc} ; done