GNU/Linux >> Tutoriales Linux >  >> Linux

Tutorial de expansión de Bash Brace:6 ejemplos de expresiones de expansión dentro de llaves

Expansión Bash Shell

Una de las operaciones del shell cuando analiza la entrada es la expansión del Shell. Bash proporciona diferentes tipos de expansión. En este artículo, repasemos una expansión importante:"Expansión de refuerzo".

Este artículo es parte de nuestra serie de tutoriales de Bash en curso.

Expansión de refuerzos

La expansión de llaves se usa para generar cadenas arbitrarias. La expansión de llaves le permite crear múltiples argumentos de línea de comando modificados a partir de un solo argumento. Las cadenas especificadas se utilizan para generar todas las combinaciones posibles con los preámbulos y postscripts circundantes opcionales. El preámbulo se antepone a cada cadena contenida entre llaves, y luego se agrega la posdata a cada cadena resultante, expandiéndose de izquierda a derecha.

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

where last is Preamble and .log is the postscript

La declaración de eco anterior le evita especificar los tres archivos de registro por separado. Si desea ver el contenido del último registro de arranque, registro mce y registro xorg, puede usar la expansión de llaves como se muestra en la declaración de eco anterior.

1. Ejemplo de copia de seguridad con expansión de llaves

$ 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

En el script de copia de seguridad anterior, copia el archivo de registro de fecha actual con la extensión .bak. El primer elemento está vacío entre llaves, por lo que el primer elemento solo tendrá un preámbulo.

2. Ejemplo para Restaurar usando expansión de llave

$ 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

En el script de restauración, el primer elemento del parámetro es .bak, mientras que el segundo elemento está vacío.

Además, consulte nuestro artículo anterior sobre las funciones de bash shell para leer más.

3. Ejemplo de Brace Expansion sin preámbulo y posdata

Si no hay un preámbulo y una posdata, simplemente expande los elementos dados entre llaves.

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

$ ./expand.sh
oct hex dec bin

Sin las cadenas opcionales de preámbulo y postscript, el resultado es solo una lista separada por espacios de las cadenas dadas

Expansión de llaves para rangos

La expansión de llaves también expande las secuencias. Las secuencias pueden ser de números enteros o de caracteres.

4. Ejemplo para secuencias de enteros y caracteres

$ 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

El primer comando cat, expande mensajes.1, mensajes.2 y mensajes.3 y muestra el contenido. y en la siguiente declaración de eco, las secuencias de caracteres y números enteros se combinan y utilizan.

Secuencias con valor de incremento

En la expansión de llaves kshell, puede usar el valor de incremento para generar las secuencias.

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

incr es numérico. Puede usar un número entero negativo, pero el signo correcto se deduce del orden de inicio y fin.

5. Ejemplo para usar Incremento en secuencias

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

Al usar esto, puede ver los archivos de registro de días alternos.

Error en la expansión de Brace

La expansión de llaves no expande las variables bash, porque la expansión de llaves es el primer paso de la expansión de shell, la variable se expandirá más adelante.

6. Ejemplo de Variables en expansión

Si ve el resultado de las siguientes dos declaraciones for, podría identificar el escollo anterior.

$ 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. ¿Expansión y variables de Bash Brace?

  2. ¿Un tutorial de finalización de Easy Bash?

  3. ¿Es `~#` una expansión tilde de Bash?

  4. Declaración de Bash If-Else con ejemplos

  5. 15 ejemplos de expansión del historial de Linux Bash que debe conocer

35 ejemplos de secuencias de comandos Bash

Tutorial de Bash Heredoc para principiantes

Tutorial de ping:15 ejemplos efectivos de comandos ping

Tutorial de introducción a Bash Scripting con 5 ejemplos prácticos

Tutorial de variables Bash:6 ejemplos prácticos de variables locales y globales de Bash

Tutorial de funciones de Bash Shell con 6 ejemplos prácticos