GNU/Linux >> Belajar Linux >  >> Linux

Buat array dengan semua antarmuka jaringan di bash

Ini solusinya, tetapkan daftar lalu tambahkan item ke dalamnya:

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

Jika Anda ingin keluaran ditampilkan satu item per baris:

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

Untuk menghapus localhost dari keluaran:

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

Percobaan saya:

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 akan membuat larik dari daftar yang dibatasi spasi putih (spasi, tab, baris baru) yang Anda berikan. misalnya array=(a b c) . Kita dapat menggunakan substitusi perintah ($() ) untuk menghasilkan daftar yang dibatasi spasi. Misalnya:

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

dan sekarang cetak array yang baru saja kita buat:

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

Untuk mengecualikan 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")

Jika Anda benar-benar ingin menggunakan ifconfig bukan ip , coba ini:

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

Linux
  1. Apakah `deklarasikan -a A` Membuat Array Kosong `a` Di Bash?

  2. Tutorial Bash Array Terbaik dengan 15 Contoh

  3. UDP-Broadcast di semua antarmuka

  1. Buat Kembar Jahat Jaringan Anda Dengan Fluxion di Kali Linux

  2. Bash -c Dengan Parameter Posisi?

  3. Bagaimana Cara Membuat Array Elemen Unik Dari String/array Di Bash?

  1. Dapatkan Semua File Tapi File Dalam Array – Bash?

  2. Bash Array Dengan Contoh

  3. Cara membuat lonjakan CPU dengan perintah bash