GNU/Linux >> Tutoriales Linux >  >> Linux

El último tutorial de Bash Array con 15 ejemplos

Una matriz es una variable que contiene múltiples valores que pueden ser del mismo tipo o de diferente tipo. No existe un límite máximo para el tamaño de una matriz, ni ningún requisito de que las variables miembro se indexen o asignen de forma contigua. El índice de matriz comienza con cero.

En este artículo, repasemos 15 operaciones de matriz diferentes en bash.

Este artículo es parte de la serie de Tutoriales de Bash en curso. Para aquellos que son nuevos en bash scripting, obtenga un buen comienzo con el tutorial de introducción a Bash Scripting.

1. Declarar una matriz y asignar valores

En bash, la matriz se crea automáticamente cuando se usa una variable en el formato como,

name[index]=value
  • nombre es cualquier nombre para una matriz
  • índice podría ser cualquier número o expresión que debe evaluarse como un número mayor o igual a cero. Puede declarar una matriz explícita utilizando declare -a arrayname.
$ cat arraymanip.sh
#! /bin/bash
Unix[0]='Debian'
Unix[1]='Red hat'
Unix[2]='Ubuntu'
Unix[3]='Suse'

echo ${Unix[1]}

$./arraymanip.sh
Red hat

Para acceder a un elemento de una matriz, use corchetes como ${nombre[índice]}.

2. Inicializar una matriz durante la declaración

En lugar de inicializar cada elemento de una matriz por separado, puede declarar e inicializar una matriz especificando la lista de elementos (separados por espacios en blanco) entre llaves.

Syntax:
declare -a arrayname=(element1 element2 element3)

Si los elementos tienen el carácter de espacio en blanco, enciérrelo entre comillas.

#! /bin/bash
$cat arraymanip.sh
declare -a Unix=('Debian' 'Red hat' 'Red hat' 'Suse' 'Fedora');

declare -a declara una matriz y todos los elementos entre paréntesis son los elementos de una matriz.

3. Imprima toda la matriz Bash

Hay diferentes formas de imprimir los elementos completos de la matriz. Si el número de índice es @ o *, se hace referencia a todos los miembros de una matriz. Puede recorrer los elementos de la matriz e imprimirlos, utilizando sentencias de bucle en bash.

echo ${Unix[@]}

# Add the above echo statement into the arraymanip.sh
#./t.sh
Debian Red hat Ubuntu Suse

Hacer referencia al contenido de una variable miembro de una matriz sin proporcionar un número de índice es lo mismo que hacer referencia al contenido del primer elemento, al que se hace referencia con el número de índice cero.

4. Longitud de la matriz Bash

Podemos obtener la longitud de una matriz usando el parámetro especial llamado $#.

${#arrayname[@]} te da la longitud de la matriz.

$ cat arraymanip.sh
declare -a Unix=('Debian' 'Red hat' 'Suse' 'Fedora');
echo ${#Unix[@]} #Number of elements in the array
echo ${#Unix}  #Number of characters in the first element of the array.i.e Debian
$./arraymanip.sh
4
6

5. Longitud del elemento n en una matriz

${#arrayname[n]} debe dar la longitud del elemento n en una matriz.

$cat arraymanip.sh
#! /bin/bash

Unix[0]='Debian'
Unix[1]='Red hat'
Unix[2]='Ubuntu'
Unix[3]='Suse'

echo ${#Unix[3]} # length of the element located at index 3 i.e Suse

$./arraymanip.sh
4

6. Extracción por desplazamiento y longitud de una matriz

El siguiente ejemplo muestra la forma de extraer 2 elementos a partir de la posición 3 de una matriz llamada Unix.

$cat arraymanip.sh
Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux');
echo ${Unix[@]:3:2}

$./arraymanip.sh
Suse Fedora

El ejemplo anterior devuelve los elementos en el tercer y cuarto índice. El índice siempre comienza con cero.

7. Extracción con desplazamiento y longitud, para un elemento particular de una matriz

Para extraer solo los primeros cuatro elementos de un elemento de matriz. Por ejemplo, Ubuntu, que se encuentra en el segundo índice de una matriz, puede usar el desplazamiento y la longitud para un elemento particular de una matriz.

$cat arraymanip.sh
#! /bin/bash

Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux');
echo ${Unix[2]:0:4}

./arraymanip.sh
Ubun

El ejemplo anterior extrae los primeros cuatro caracteres del segundo elemento indexado de una matriz.

8. Buscar y reemplazar en una matriz de elementos

El siguiente ejemplo, busca Ubuntu en una matriz de elementos y reemplaza lo mismo con la palabra 'SCO Unix'.

$cat arraymanip.sh
#!/bin/bash
Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux');

echo ${Unix[@]/Ubuntu/SCO Unix}

$./arraymanip.sh
Debian Red hat SCO Unix Suse Fedora UTS OpenLinux

En este ejemplo, reemplaza el elemento en el segundo índice 'Ubuntu' con 'SCO Unix'. Pero este ejemplo no reemplazará permanentemente el contenido de la matriz.

9. Agregar un elemento a un Bash Array existente

El siguiente ejemplo muestra la forma de agregar un elemento a la matriz existente.

$cat arraymanip.sh
Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux');
Unix=("${Unix[@]}" "AIX" "HP-UX")
echo ${Unix[7]}

$./arraymanip.sh
AIX

En la matriz llamada Unix, los elementos 'AIX' y 'HP-UX' se agregan en el índice 7 y 8 respectivamente.

10. Eliminar un elemento de una matriz

unset se usa para eliminar un elemento de una matriz. unset tendrá el mismo efecto que asignar un valor nulo a un elemento.

$cat arraymanip.sh
#!/bin/bash
Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux');

unset Unix[3]
echo ${Unix[3]}

El script anterior simplemente imprimirá nulo, que es el valor disponible en el tercer índice. El siguiente ejemplo muestra una de las formas de eliminar un elemento por completo de una matriz.

$ cat arraymanip.sh
Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux');
pos=3
Unix=(${Unix[@]:0:$pos} ${Unix[@]:$(($pos + 1))})
echo ${Unix[@]}

$./arraymanip.sh
Debian Red hat Ubuntu Fedora UTS OpenLinux

En este ejemplo, ${Unix[@]:0:$pos} le dará 3 elementos a partir del índice 0, es decir, 0,1,2 y ${Unix[@]:4} le dará los elementos del índice 4 al último índice. Y combine ambos resultados anteriores. Esta es una de las soluciones para eliminar un elemento de una matriz.

11. Eliminar elementos de matriz Bash usando patrones

En la condición de búsqueda, puede proporcionar los patrones y almacenar el elemento restante en otra matriz, como se muestra a continuación.

$ cat arraymanip.sh
#!/bin/bash
declare -a Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora');
declare -a patter=( ${Unix[@]/Red*/} )
echo ${patter[@]}

$ ./arraymanip.sh
Debian Ubuntu Suse Fedora

El ejemplo anterior elimina los elementos que tienen el patrón Rojo*.

12. Copiando una matriz

Expanda los elementos de la matriz y guárdelos en una nueva matriz como se muestra a continuación.

#!/bin/bash
Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux');
Linux=("${Unix[@]}")
echo ${Linux[@]}

$ ./arraymanip.sh
Debian Red hat Ubuntu Fedora UTS OpenLinux

13. Concatenación de dos Bash Arrays

Expanda los elementos de las dos matrices y asígnelos a la nueva matriz.

$cat arraymanip.sh
#!/bin/bash
Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux');
Shell=('bash' 'csh' 'jsh' 'rsh' 'ksh' 'rc' 'tcsh');

UnixShell=("${Unix[@]}" "${Shell[@]}")
echo ${UnixShell[@]}
echo ${#UnixShell[@]}

$ ./arraymanip.sh
Debian Red hat Ubuntu Suse Fedora UTS OpenLinux bash csh jsh rsh ksh rc tcsh
14

Imprime la matriz que tiene los elementos de la matriz 'Unix' y 'Shell', y el número de elementos de la nueva matriz es 14.

14. Eliminación de una matriz completa

unset se usa para eliminar una matriz completa.

$cat arraymanip.sh
#!/bin/bash
Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux');
Shell=('bash' 'csh' 'jsh' 'rsh' 'ksh' 'rc' 'tcsh');

UnixShell=("${Unix[@]}" "${Shell[@]}")
unset UnixShell
echo ${#UnixShell[@]}

$ ./arraymanip.sh
0

Después de desarmar una matriz, su longitud sería cero como se muestra arriba.

15. Cargar contenido de un archivo en una matriz

Puede cargar el contenido del archivo línea por línea en una matriz.

#Example file
$ cat logfile
Welcome
to
thegeekstuff
Linux
Unix

$ cat loadcontent.sh
#!/bin/bash
filecontent=( `cat "logfile" `)

for t in "${filecontent[@]}"
do
echo $t
done
echo "Read file content!"

$ ./loadcontent.sh
Welcome
to
thegeekstuff
Linux
Unix
Read file content!

En el ejemplo anterior, cada índice de un elemento de matriz se ha impreso a través del ciclo for.

Lecturas recomendadas

Bash 101 Hacks, por Ramesh Natarajan . Paso la mayor parte de mi tiempo en el entorno Linux. Entonces, naturalmente, soy un gran admirador de la línea de comandos de Bash y las secuencias de comandos de Shell. Hace 15 años, cuando estaba trabajando en diferentes versiones de *nix, solía escribir mucho código en C shell y Korn shell. Años más tarde, cuando comencé a trabajar en Linux como administrador del sistema, prácticamente automaticé todas las tareas posibles utilizando scripts de shell Bash. Basado en mi experiencia con Bash, he escrito el libro electrónico Bash 101 Hacks que contiene 101 ejemplos prácticos tanto en la línea de comandos de Bash como en las secuencias de comandos de shell. Si ha estado pensando en dominar Bash, hágase un favor y lea este libro, que lo ayudará a tomar el control de su línea de comandos y secuencias de comandos de shell de Bash.


Linux
  1. El tutorial del comando Numfmt con ejemplos para principiantes

  2. El tutorial de comando Type con ejemplos para principiantes

  3. El tutorial del comando Shuf con ejemplos para principiantes

  4. Matrices bash con ejemplos

  5. '&&' vs. '&' con el comando 'test' en Bash

Bash Scripting:matriz asociativa explicada con ejemplos

Bash Scripting:matriz indexada explicada con ejemplos

La guía de descarga definitiva de Wget con 15 ejemplos impresionantes

El tutorial Ultimate Tar Command con 10 ejemplos prácticos

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

HowTo:El último tutorial del comando Logrotate con 10 ejemplos