Trabajar con matrices en scripts de shell de Linux-Parte 8

No podemos imaginar un lenguaje de programación sin el concepto de matrices. No importa cómo se implementen entre varios idiomas. En cambio, las matrices nos ayudan a consolidar datos, similares o diferentes, bajo un nombre simbólico.

 Trabajar con matrices en Shell Scripting Trabajar con matrices en Shell Scripting

Ya que estamos preocupados por los scripts de shell, este artículo le ayudará a jugar con algunos scripts de shell que hacen uso de este concepto de matrices.

Inicialización y uso de matrices

Con las versiones más recientes de bash, admite matrices unidimensionales. Una matriz puede ser declarada explícitamente por el comando declare shell-builtin.

declare-a var

Pero no es necesario declarar variables de matriz como se indicó anteriormente. Podemos insertar elementos individuales en la matriz directamente de la siguiente manera.

var [XX] =

donde “XX” denota el índice de la matriz. Para eliminar la referencia de elementos de la matriz, utilice la sintaxis de corchetes, es decir,

$ var [XX] freestar.config.enabled_slots.push

Nota. la indexación de matrices siempre comienza con 0.

Otra forma conveniente de inicializar una matriz completa es utilizando el par de paréntesis como se muestra a continuación.

var = (elemento1 elemento2 elemento3… elementoN)

Existe otra forma de asignar valores a matrices. Esta forma de inicialización es una subcategoría del método explicado anteriormente.

array = ([XX] = [XX] = …)

También podemos leer/asignar valores a la matriz durante el tiempo de ejecución usando el comando read shell-incorporado.

read-a matriz

Ahora, al ejecutar la declaración anterior dentro de un script, espera alguna entrada. Necesitamos proporcionar los elementos de la matriz separados por espacio (y no retorno de carro). Después de ingresar los valores, presione enter para terminar.

Para recorrer los elementos de la matriz también podemos usar for loop.

for i en “$ array [@]” do #access cada elemento como $ i. . . done

El siguiente script resume el contenido de esta sección en particular.

#!/bin/bash array1 [0] = one array1 [1] = 1 echo $ array1 [0] echo $ array1 [ 1] matriz2 = (uno dos tres) echo $ matriz2 [0] eco $ matriz2 [2] matriz3 = ([9] = nueve [11] = 11) eco $ matriz3 [9] eco $ array3 [11] read-a array4 for i in “$ array4 [@]” do echo $ i done exit 0 Varias operaciones en matrices

Muchas de las operaciones de cadena estándar funcionan en matrices. Mire el siguiente script de muestra que implementa algunas operaciones en matrices (incluidas las operaciones de cadena).

#!/Bin/bash array = (apple bat cat dog elephant frog) #print primer elemento echo $ array [0] echo $ array: 0 #display todos los elementos echo $ array [@] echo $ array [@]: 0 #display todos los elementos excepto el primero echo $ array [@]: 1 #display elementos en un rango echo $ array [@]: 1: 4 # longitud del primer elemento echo $ # array [0] echo $ # array # número de elementos echo $ # array [*] echo $ #array [@] #replacing substring echo $ array [@]//a/A exit 0

A continuación se muestra el resultado producido al ejecutar el script anterior.

manzana manzana manzana murciélago gato perro elefante rana manzana murciélago gato perro elefante rana murciélago gato perro elefante rana murciélago gato perro elefante 5 5 6 6 manzana murciélago gato perro elefante rana

Creo que no tiene sentido explicar el guión anterior en detalle, ya que se explica por sí mismo. Si es necesario, dedicaré una parte de esta serie exclusivamente a las manipulaciones de cadenas.

Sustitución de comandos con matrices

La sustitución de comandos asigna la salida de un comando o varios comandos a otro contexto. Aquí, en este contexto de matrices, podemos insertar la salida de comandos como elementos individuales de matrices. La sintaxis es la siguiente.

array = ($ (comando))

Por defecto, el contenido de la salida del comando separado por espacios en blanco se conecta a la matriz como elementos individuales. La siguiente secuencia de comandos enumera el contenido de un directorio, que son archivos con 755 permisos.

#!/bin/bash ERR = 27 EXT = 0 if [$ #-ne 1]; luego repita “Uso: $ 0 ” salga $ ERR fi if [!-d $ 1]; luego echo “El directorio $ 1 no existe” sale $ ERR fi temp = ($ (encuentra $ 1-maxdepth 1-type f)) para i en “$ temp [@]” do perm = $ (ls-l $ i) si [`expr $ perm: 0: 10:”-rwxr-xr-x “`-eq 10]; luego echo $ i ## */ fi hecho salir $ EXT Simulación de matrices bidimensionales

Podemos representar fácilmente una matriz bidimensional utilizando una matriz unidimensional. En fila, los elementos de representación de orden principal en cada fila de una matriz se almacenan progresivamente en índices de matriz de manera secuencial. Para una matriz mXn, la fórmula para la misma se puede escribir como.

matrix [i] [j] = array [n * i + j]

Mire otro script de muestra para agregar 2 matrices e imprimir el resultado matrix.

#!/bin/bash read-p “Ingrese el orden de la matriz [mxn]:” tm = $ t: 0: 1 n = $ t: 2: 1 echo “Ingrese los elementos para la primera matriz “para i en` seq 0 $ (($ m-1)) `hacer para j en` seq 0 $ (($ n-1)) `leer x [$ (($ n * $ i + $ j))] done done echo “Ingrese los elementos para la segunda matriz” para i en `seq 0 $ (($ m-1))` do for j in `seq 0 $ (($ n-1))` do read y [$ (($ n * $ i + $ j))] z [$ (($ n * $ i + $ j))] = $ (($ x [$ (($ n * $ i + $ j)) ] + $ y [$ (($ n * $ i + $ j))])) hecho hecho echo “La matriz después de la suma es” para i en `seq 0 $ (($ m-1))` hacer para j en `seq 0 $ (($ n-1))` do echo-ne “$ z [$ (($ n * $ i + $ j))] t” hecho echo-e ” n” hecho exit 0

Aunque existen limitaciones para implementar matrices dentro de scripts de shell, se vuelve útil en un puñado de situaciones, especialmente cuando manejamos w con sustitución de comando. Desde un punto de vista administrativo, el concepto de matrices allanó el camino para el desarrollo de muchos scripts de fondo en sistemas GNU/Linux.