Secuencias de comandos Bash – Matriz

Secuencias de comandos Bash – Matriz

matrices son conceptos importantes en programación o scripting. Las matrices nos permiten almacenar y recuperar elementos en forma de lista que se pueden utilizar para determinadas tareas. En bash, también tenemos matrices que nos ayudan a crear scripts en la línea de comando para almacenar datos en formato de lista. En este artículo, comprenderemos los conceptos básicos de las matrices en las secuencias de comandos bash.

Creando matrices

Para crear una matriz básica en un script bash, podemos usar declarar -a comando seguido del nombre de la variable de matriz que desea proporcionar.

#!/bin/usr/env bash declare -a sport=( [0]=football [1]=cricket [2]=hockey [3]=basketball ) 

O

#!/bin/usr/env bash sport[0]=football sport[1]=cricket sport[2]=hockey sport[3]=basketball 

El valor de los elementos puede ser cualquier número entero o cadena o cualquier otra forma de datos que se desee. Podemos ver que la matriz se declara en un script bash de dos maneras: la primera parece más conveniente y menos complicada de declarar. Si queremos declarar la matriz de una sola vez, la primera es la opción óptima, pero si los elementos se van a agregar en pedazos, la segunda es una buena opción.

Imprimir las matrices

Después de declarar la matriz, si queremos mostrar todos los elementos de la matriz podemos usar el símbolo @.

#!/bin/usr/env bash declare -a sport=( [0]=football [1]=cricket [2]=hockey [3]=basketball ) echo '${sport[@]}' 

echo '${array_name[@]}' 

Usamos [@] como índice de la matriz para mostrar todos los elementos. Todos los elementos se imprimen separados por espacios. Las comillas alrededor de la variable se expanden e imprimen todos los elementos de la matriz.

Iterando sobre la matriz

Para iterar sobre una matriz un elemento a la vez, podemos usar bucles y realizar cualquier operación dentro del cuerpo del mismo.

#!/bin/usr/env bash declare -a sport=( [0]=football [1]=cricket [2]=hockey [3]=basketball ) for i in ${nums[@]} do echo -e '$i 
' done 

Como podemos ver, hemos utilizado un bucle for para imprimir los elementos de la matriz uno por uno. Hemos utilizado el truco de la sección anterior de obtener todos los elementos de la matriz e iterarlos uno por uno en el bucle for. El ${array_name[@]} se expande a todos los elementos de la matriz y el bucle for los itera uno por uno con el iterador en el ejemplo que es el variable yo , dentro del cuerpo del bucle for imprimimos el variable/iterador i y así iterar sobre la matriz.

Obtener el número de elementos del Array

Para obtener el número de la matriz de elementos, podemos usar el operador # antes del nombre de la matriz en s en ${array_name[@]}.

 #!/bin/usr/env bash declare -a sport=( [0]=football [1]=cricket [2]=hockey [3]=basketball ) echo '${#sport[@]}' 

Por lo tanto, devolvemos el tamaño de la matriz usando el comando ${#deporte[@]}, # se usa para obtener el tamaño de la variable al lado, usando las comillas dobles se evalúa el valor del comando y obtenemos el número de elementos en la matriz según lo deseado.

Insertar un elemento en una matriz

Insertar un elemento es bastante sencillo, necesitamos establecer el índice apropiado del elemento seguido del valor del elemento que le gustó dar.

#!/bin/usr/env bash declare -a sport=( [0]=football [1]=cricket [2]=hockey [3]=basketball ) echo '${sport[@]}' sport[4]='dodgeball' sport[2]='golf' echo '${sport[@]}' 

Agregamos el quinto elemento (cuarto índice) a la matriz y también modificamos/editamos el tercer elemento de la matriz (segundo índice). El nombre de matriz [índice] = valor Son todos los trucos para agregar, modificar o inicializar los elementos de la matriz.

También podemos agregar elementos a una matriz usando el operador +=.

#!/bin/usr/env bash declare -a sport=( [0]=football [1]=cricket [2]=hockey [3]=basketball ) echo '${sport[@]}' sport+=('golf' 'baseball') echo '${sport[@]}' echo 'Size : ${#sport[@]}' 

Como se ve en el ejemplo, podemos agregar varios elementos a la matriz con un código mínimo. Usamos array_name+=(elementos) para agregar elementos a la matriz.

Eliminar un elemento de Array

Para eliminar un elemento de la matriz, podemos usar el comando unset. El comando toma el nombre de la variable en nuestro caso el nombre de la matriz y el índice de ese elemento. El índice también puede ser relativo, es decir, -1 indica el último elemento y -2 el penúltimo y así sucesivamente.

#!/bin/usr/env bash declare -a sport=( [0]=football [1]=cricket [2]=hockey [3]=basketball ) unset sport[1] echo '${sport[@]}' echo '${#sport[@]}' 

Como podemos ver, unset arrayname[index] eliminará el elemento en el índice de la matriz. Además, el tamaño de la matriz se ha reducido de 4 a 3, lo que indica que el elemento se elimina por completo y no solo se reemplaza con espacios en blanco.

Usando índices relativos

Si usamos índices como -1, -2, etc., se hace referencia a los elementos desde el último elemento y, por lo tanto, también podemos eliminarlos o modificarlos con orden relativo desde atrás.

#!/bin/usr/env bash declare -a sport=( [0]=football [1]=cricket [2]=hockey [3]=basketball ) unset sport[-3] echo '${sport[@]}' 

Como podemos ver, también se hace referencia al índice 1 como -3 desde atrás y, por lo tanto, resulta relativamente más fácil hacer referencia a ciertos elementos en una matriz grande.

Empalmar una matriz

Podemos empalmar (sacar una poción) una matriz para asignarla o imprimirla en otra variable/matriz.

#!/bin/usr/env bash declare -a sport sport+=('football' 'cricket' 'hockey' 'basketball') sport+=('golf' 'baseball') echo 'sport = ${sport[@]}' arr='${sport[@]:1:3}' echo 'arr = ${arr[@]}' 

Hemos sacado un fragmento de la matriz deportiva, es decir, el elemento entre el índice 1 y 3 inclusive, y lo asignamos a la variable arr, que también es una matriz. El operador @ obtiene todos los elementos de la matriz y luego podemos unir la matriz entre los índices 1 y 3 para tener los elementos en 1, 2 y 3 (criquet, hockey y béisbol) de la matriz deportiva.

Definir una matriz estática e imprimir los elementos de la matriz.

#To declare static Array programmingArray=(Java Python Ruby Perl) #In below 2 ways we can print the elements of the static array echo 'Way 1 of printing static values by using [@]:0 - ' ${programmingarray[@]$ echo 'Way 2 of printing static values by using [*]:0 - ' ${programmingarray[*]$ 

De 2 maneras podemos imprimir elementos de una matriz estática.

Ejecución del programa

sh So, we can give as sh arraycheck2.sh # arraycheck2.sh is the name of the script file here 

Pasar los argumentos de la línea de comando en un archivo de script

#All the array elements are stored in an array called programmingArray programmingArray=('$@') #Index values start from 0 #If we do not specify the index, it will take up the size of first index value echo 'Size of programmingArray at 0th location..:' $(#programmingArray[0]} echo 'Size of programmingArray at 1st location..:' $(#programmingArray[1]} 

El script anterior se puede ejecutar como

# Aquí Java, Python y Ruby son argumentos de línea de comando

sh arrayCheck.sh Java Python Ruby 

Pasos de ejecución del script:

matriz de programación = (Java Python Ruby)

#Java estará presente en el índice 0, su tamaño se puede calcular de la siguiente manera

${#programmingArray[0]}

De manera similar, Python estará presente en el primer índice, su tamaño se puede calcular de la siguiente manera

${#programmingArray[1]}

Producción:

Iterando los valores de la matriz usando el bucle for

$@ proporcionará todos los valores que se pasaron mediante argumentos de la línea de comandos y se almacenarán en una matriz.

Se puede iterar usando el bucle for.

declare -a programmingArray=('$@') i=0 for programming in '$@' do echo 'Array value at index ' $i ' : ' $programming i=$((i+1)); done 

Producción:

Echemos un vistazo rápido a lo que representan todos y cada uno de los símbolos.

Sintaxis

Producción
Arr=()

arr[0]=3 Sobrescribir el primer elemento

arr+=(4) Agregar valor(es)

str=$(ls) Guardar la salida de ls como una cadena

arr=( $(ls) ) Guardar la salida de ls como una matriz de archivos

${arr[@]:s:n} Recuperar n elementos comenzando en el índice

#Podemos proporcionar un conjunto de valores

como esto

arr=(uno dos tres)

Para inicializar una matriz
${arr[0]} Para recuperar el primer elemento. El índice siempre comienza con 0
${arr[@]} Para recuperar todos los elementos y luego podemos iterar en un bucle.
${!arr[@]} Para recuperar índices de matriz solo
${#arr[@]} Para calcular el tamaño de una matriz
arreglo[2]=3 Para sobrescribir el tercer elemento debemos usarlo de esta manera. Como el índice comienza en 0, arr[2] es correcto.
arreglo+=(40) Para agregar valores, podemos usar + y luego asignar con = y por lo tanto se usa +=.
cadena=$(ls) Para guardar la salida del comando ls como una cadena (se muestra el ejemplo 4 para esta salida)
arreglo=( $(ls) ) Para guardar la salida de ls como una matriz de archivos (se muestra el ejemplo 5 para esta salida)
${arr[@]:s:n} Para recuperar n elementos comenzando en el índice s