GNU/Linux >> Tutoriales Linux >  >> Linux

Cree una matriz con todas las interfaces de red en bash

Aquí hay una solución, asigne la lista y luego agregue un elemento:

#!/bin/bash

array_test=()
for iface in $(ifconfig | cut -d ' ' -f1| tr ':' '\n' | awk NF)
do
        printf "$iface\n"
        array_test+=("$iface")
done
echo ${array_test[@]}

Si desea que la salida muestre un elemento por línea:

for i in "${array_test[@]}"; do echo "$i"; done

Para eliminar localhost de la salida:

if [ "$iface" != "lo" ] 
then
    array_test+=("$iface")
fi

Mi intento:

readarray -t interfaces < <(ip l | awk -F ":" '/^[0-9]+:/{dev=$2 ; if ( dev !~ /^ lo$/) {print $2}}')
for i in "${interfaces[@]// /}" ; do echo "$i" ; done

bash construirá una matriz a partir de cualquier lista delimitada por espacios en blanco (espacios, tabulaciones, líneas nuevas) que le proporcione. p.ej. array=(a b c) . Podemos usar la sustitución de comandos ($() ) para generar una lista delimitada por espacios en blanco. Por ejemplo:

$ ifaces=( $(ip addr list | awk -F': ' '/^[0-9]/ {print $2}') )

y ahora imprima la matriz que acabamos de crear:

$ declare -p ifaces
declare -a ifaces=([0]="lo" [1]="eth0" [2]="eth1" [3]="br1" [4]="br0" [5]="ppp0")

Para excluir lo :

$ ifaces=( $(ip addr list | awk -F': ' '/^[0-9]/ && $2 != "lo" {print $2}') )
$ declare -p ifaces
declare -a ifaces=([0]="eth0" [1]="eth1" [2]="br1" [3]="br0" [4]="ppp0")

Si realmente quieres usar ifconfig en lugar de ip , prueba esto:

ifaces=( $(ifconfig | awk -F':'  '/^[^ ]*: / && $1 != "lo" {print $1}') )

Linux
  1. Bash -c con parámetros posicionales?

  2. ¿Cómo crear una matriz de elementos únicos a partir de una cadena/matriz en Bash?

  3. Matrices bash con ejemplos

  4. UDP-Broadcast en todas las interfaces

  5. Enumere solo los nombres de dispositivos de todas las interfaces de red disponibles

Arreglos bash

Matriz asociativa en Bash

Bash Scripting:matriz asociativa explicada con ejemplos

Bash Scripting:matriz indexada explicada con ejemplos

Cómo crear documentos con scripts Bash

Interfaces de usuario con diálogo. Script Bash (IV)