Trabajar con matrices en Scripting de Shell Linux - Parte 8

Trabajar con matrices en Scripting de Shell 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 su lugar, las matrices nos ayudan a consolidar datos, similares o diferentes, bajo un nombre simbólico.

Trabajar con matrices en scripting de shell

Aquí, como nos preocupa la scripting de shell, este artículo lo ayudará a jugar con algunos scripts de shell que utilizan este concepto de matrices.

Inicialización y uso de la matriz

Con versiones más nuevas de Bash, admite matrices unidimensionales. Una matriz puede ser declarada explícitamente por el declarar construido con cáscara.

declarar -A var 

Pero no es necesario declarar las variables de matriz como se indica anteriormente. Podemos insertar elementos individuales para matar directamente de la siguiente manera.

var [xx] = 

donde 'xx' denota el índice de matriz. A los elementos de la matriz de desertores Use la sintaxis del soporte rizado, i.mi.

$ var [xx] 

Nota: La indexación de matriz siempre comienza con 0.

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

var = (element1 element2 element3 ... elementn) 

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

array = ([xx] = [xx] = ...) 

También podemos leer/asignar valores a la matriz durante el tiempo de ejecución utilizando el leer construido con cáscara.

Leer -A Array 

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

Para atravesar los elementos de la matriz, también podemos usar para bucle.

para i en "$ array [@]" do #access cada elemento como $ i ... hecho 

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

#!/bin/bash array1 [0] = un array1 [1] = 1 echo $ array1 [0] echo $ array1 [1] array2 = (uno dos) echo $ array2 [0] echo $  array2 [2] array3 = ([9] = nueve [11] = 11) echo $ array3 [9] echo $ array3 [11] read -a array4 para i en "$ array4 [@] "¿Echo $ hice la salida 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 First Element Echo $ Array [0] echo $ Array: 0 #display Todos los elementos echo $ array [@] echo $ array [Array [Array [Array [Array [ @]: 0 #display Todos los elementos excepto el primer echo $ array [@]: 1 #display elementos en un rango echo $ array [@]: 1: 4 #length del primer elemento echo $  #array [0] echo $ #array #number of Elements echo $ #array [*] echo $ #array [@] #replacing sustring echo $ array [@] // a/a salir 0 

El siguiente es la salida producida al ejecutar el script anterior.

manzana manzana bat bat gato dog elefante rana bat de manzana gato dog elefante bat bat gato dog elefante bat bat gato Elefante 5 5 6 6 MAPAN 

Creo que no hay importancia en explicar el script anterior en detalle, ya que se explica por sí mismo. Si es necesario, dedicaré una parte de esta serie exclusivamente sobre manipulaciones de cadenas.

Sustitución de comandos con matrices

La sustitución de comandos asigna la salida de un comando o múltiples comandos en 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, los contenidos en la salida de comando separado por espacios blancos están conectados a la matriz como elementos individuales. El siguiente script enumera el contenido de un directorio, que son archivos con 755 permisos.

#!/bin/bash err = 27 ext = 0 if [$# -ne 1]; luego echo "uso: $ 0" Salir $ err fi si [ ! -d $ 1]; Entonces echo "Directorio $ 1 no existe" Salir $ err fi temp = ($ (encontrar $ 1 -Maxdepth 1 - -type f)) para i en "$ temp [@]" do Perm = $ (ls -l $ i) if ['expr $ perman: 0: 10: "-rwxr-xr-x"' -eq 10]; Entonces echo $ i ##*/ fi hecho de salida $ ext 

Simulando matrices bidimensionales

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

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

Mire otro script de muestra para agregar 2 matrices e imprimir la matriz resultante.

#!/bin/bash read -p "Ingrese el orden de matriz [mxn]:" t m = $ t: 0: 1 n = $ t: 2: 1 echo "Ingrese los elementos para la primera matriz" para i in '' Seq 0 $ (($ M-1)) 'do para j en' seq 0 $ (($ n-1)) 'do lea x [$ (($ n*$ i+$ j))] hecho hecho eco " Ingrese los elementos para la segunda matriz "para i en 'seq 0 $ (($ m-1))' do para j en 'seq 0 $ (($ n-1))' Do y [$ ($ n* $ i+$ j))] z [$ (($ n*$ i+$ j))] = $ (($ x [$ (($ n*$ i+$ j))]+$ y [$ (($ n*$ i+$ j))])) hecho hecho echo "matriz después de la adición es" para i en 'seq 0 $ (($ m-1))' do para j en 'seq 0 $ (((( $ n -1)) 'do echo -ne "$ z [$ (($ n*$ i+$ j))] \ t" hecho echo -e "\ n" HECHO Salida 0 

Aunque existen limitaciones para implementar matrices dentro de las secuencias de comandos de shell, se vuelve útil en un puñado de situaciones, especialmente cuando manejamos con la sustitución de comandos. Mirando 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.