GNU/Linux >> Tutoriels Linux >  >> Linux

Tutoriel d'expansion des accolades Bash :6 exemples d'expressions d'expansion dans les accolades

Extension du shell bash

L'une des opérations du shell lorsqu'il analyse l'entrée est l'expansion du shell. Bash fournit différents types d'expansion. Dans cet article, passons en revue une extension importante - "l'extension de l'accolade".

Cet article fait partie de notre série de tutoriels Bash en cours.

Extension de l'accolade

L'expansion des accolades est utilisée pour générer des chaînes arbitraires. L'expansion des accolades vous permet de créer plusieurs arguments de ligne de commande modifiés à partir d'un seul argument. Les chaînes spécifiées sont utilisées pour générer toutes les combinaisons possibles avec les préambules et postscripts facultatifs environnants. Le préambule est préfixé à chaque chaîne contenue dans les accolades, et le post-scriptum est ensuite ajouté à chaque chaîne résultante, se développant de gauche à droite.

$ echo last{mce,boot,xorg}.log
lastmce.log lastboot.log lastxorg.log

where last is Preamble and .log is the postscript

L'instruction echo ci-dessus vous évite de spécifier les trois fichiers journaux séparément. Si vous souhaitez afficher le contenu du dernier journal de démarrage, du journal mce et du journal xorg, vous pouvez utiliser l'expansion des accolades comme indiqué dans l'instruction echo ci-dessus.

1. Exemple de sauvegarde utilisant l'expansion des accolades

$ cat bkup.sh
set -x # expand the commands
da=`date +%F`
cp $da.log{,.bak}

$ ./bkup.sh
++ date +%F
+ da=2010-05-28
+ cp 2010-05-28.log 2010-05-28.log.bak

Dans le script de sauvegarde ci-dessus, il copie le fichier journal de la date actuelle avec l'extension .bak. Le premier élément est vide entre accolades, donc le premier élément n'aura qu'un préambule.

2. Exemple de restauration à l'aide de l'expansion des accolades

$ cat restore.sh
set -x # expand the commands
da=`date +%F`
cp $da.log{.bak,}

$ ./restore.sh
++ date +%F
+ da=2010-05-28
+ cp 2010-05-28.log.bak 2010-05-28.log

Dans le script de restauration, le premier élément du paramètre est .bak où le deuxième élément est vide.

Reportez-vous également à notre article précédent sur les fonctions du shell bash pour une lecture supplémentaire.

3. Exemple pour Brace Expansion sans préambule ni post-scriptum

S'il n'y a pas de préambule et de post-scriptum, il développe simplement les éléments donnés entre accolades.

$ cat expand.sh
echo {oct,hex,dec,bin}

$ ./expand.sh
oct hex dec bin

Sans les chaînes facultatives de préambule et de post-scriptum, le résultat est simplement une liste séparée par des espaces des chaînes données

Extension des accolades pour les plages

L'expansion des accolades étend également les séquences. Les séquences peuvent être des nombres entiers ou des caractères.

4. Exemple de séquences d'entiers et de caractères

$ cat sequence.sh
cat /var/log/messages.{1..3}
echo {a..f}{1..9}.txt

$ ./sequence.sh
May  9 01:18:29 x3 ntpd[2413]: time reset -0.132703 s
May  9 01:22:38 x3 ntpd[2413]: synchronized to LOCAL(0), stratum 10
May  9 01:23:44 x3 ntpd[2413]: synchronized to
May  9 01:47:48 x3 dhclient: DHCPREQUEST on eth0
May  9 01:47:48 x3 dhclient: DHCPACK from 23.42.38.201
..
..
a1.txt a2.txt a3.txt a4.txt b1.txt b2.txt b3.txt b4.txt c1.txt c2.txt c3.txt c4.txt

La première commande cat développe messages.1, messages.2 et messages.3 et affiche le contenu. et dans l'instruction d'écho suivante, les séquences de caractères et d'entiers sont combinées et utilisées.

Séquences avec valeur d'incrément

Dans l'expansion des accolades kshell, vous pouvez utiliser la valeur d'incrémentation pour générer les séquences.

Syntax:
<start>..<end>..<incr>

incr est numérique. Vous pouvez utiliser un entier négatif, mais le signe correct est déduit de l'ordre de début et de fin.

5. Exemple d'utilisation de l'incrémentation dans les séquences

$ ksh
$ echo /var/log/messages.{1..7..2}
/var/log/messages.1 /var/log/messages.3 /var/log/messages.5 /var/log/messages.7
$

En utilisant cela, vous pouvez voir les fichiers journaux des jours alternatifs.

Piège dans l'extension Brace

L'expansion des accolades ne développe pas les variables bash, car l'expansion des accolades est la toute première étape de l'expansion du shell, la variable sera développée plus tard.

6. Exemple pour Variables en expansion

Si vous voyez la sortie des deux instructions for suivantes, vous pouvez identifier le piège ci-dessus.

$ cat var_seq.sh
# Print 1 to 4 using sequences.
for i in {1..4}
do
        echo $i
done
start=1
end=4

# Print 1 to 4 using through variables
echo "Sequences expressed using variables"
for i in {$start..$end}
do
        echo $i
done

$ ./var_seq.sh
1
2
3
4
Sequences expressed using variables
{1..4}

Linux
  1. Expansion et variables des accolades Bash ?

  2. Un tutoriel d'achèvement facile de Bash ??

  3. Est-ce que `~#` est une extension Tilde de Bash ?

  4. Le tutoriel Ultimate Bash Array avec 15 exemples

  5. 6 Exemples d'expressions conditionnelles Bash ( -e, -eq, -z, !=, [, [[ ..)

35 exemples de scripts bash

Tutoriel Bash Heredoc pour les débutants

Tutoriel Ping :15 exemples de commandes Ping efficaces

Tutoriel d'introduction aux scripts Bash avec 5 exemples pratiques

Tutoriel sur les variables Bash - 6 exemples pratiques de variables globales et locales Bash

Tutoriel sur les fonctions Bash Shell avec 6 exemples pratiques