GNU/Linux >> Linux Esercitazione >  >> Linux

Crea un array con tutte le interfacce di rete in bash

Ecco una soluzione, assegna l'elenco e poi aggiungi un elemento ad esso:

#!/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[@]}

Se vuoi che l'output visualizzi un elemento per riga:

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

Per rimuovere localhost dall'output:

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

Il mio tentativo:

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 costruirà un array da qualsiasi elenco delimitato da spazi bianchi (spazi, tabulazioni, newline) che gli dai. per esempio. array=(a b c) . Possiamo usare la sostituzione dei comandi ($() ) per generare tale elenco delimitato da spazi bianchi. Ad esempio:

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

e ora stampa l'array che abbiamo appena creato:

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

Per escludere 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")

Se vuoi davvero usare ifconfig anziché ip , prova questo:

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

Linux
  1. Crea un gemello malvagio della tua rete con Fluxion su Kali Linux

  2. Bash -c con parametri posizionali?

  3. Il tutorial Ultimate Bash Array con 15 esempi

  4. Trasmissione UDP su tutte le interfacce

  5. Elenca solo i nomi dei dispositivi di tutte le interfacce di rete disponibili

Matrici Bash

Matrice associativa in Bash

Bash Scripting – Array associativo spiegato con esempi

Bash Scripting – Array indicizzato spiegato con esempi

Come creare documenti con gli script Bash

Interfacce utente con finestra di dialogo. Scripting Bash(IV)