GNU/Linux >> Znalost Linux >  >> Linux

Vytvořte pole se všemi síťovými rozhraními v bash

Zde je řešení, přiřaďte seznam a poté do něj přidejte položku:

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

Pokud chcete, aby se na výstupu zobrazovala jedna položka na řádek:

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

Odebrání localhost z výstupu:

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

Můj pokus:

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 vytvoří pole z libovolného seznamu odděleného mezerami (mezery, tabulátory, nové řádky), který mu zadáte. např. array=(a b c) . Můžeme použít substituci příkazů ($() ), abyste vygenerovali takový seznam oddělený mezerami. Například:

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

a nyní vytiskněte pole, které jsme právě vytvořili:

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

Chcete-li vyloučit 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")

Pokud opravdu chcete použít ifconfig spíše než ip , zkuste toto:

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

Linux
  1. Vytvořte zlé dvojče své sítě pomocí Fluxion na Kali Linuxu

  2. Bash -c s pozičními parametry?

  3. Jak vytvořit pole jedinečných prvků ze řetězce/pole v Bash?

  1. Vytváří `deklare -a A` prázdné pole `a` v Bash?

  2. Získat všechny soubory kromě souborů v poli – Bash?

  3. UDP-Broadcast na všech rozhraních

  1. Bash pole s příklady

  2. Výukový program Ultimate Bash Array s 15 příklady

  3. Jak vytvořit špičku CPU pomocí příkazu bash