GNU/Linux >> Linux の 問題 >  >> Linux

bash ですべてのネットワーク インターフェイスを含むアレイを作成する

これが解決策です。リストを割り当ててから項目を追加してください:

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

出力を 1 行に 1 項目表示する場合:

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

出力から localhost を削除するには:

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

私の試み:

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 空白で区切られた (スペース、タブ、改行) リストから配列を作成します。例えばarray=(a b c) .コマンド置換を使用できます ($() ) を使用して、このような空白で区切られたリストを生成します。例:

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

作成したばかりの配列を出力します:

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

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

どうしても ifconfig を使いたい場合 ip ではなく 、これを試してください:

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

Linux
  1. `declare -a A`はBashで空の配列`a`を作成しますか?

  2. 例を含む Bash 配列

  3. bash コマンドで CPU スパイクを作成する方法

  1. KaliLinuxでFluxionを使用してネットワークの邪悪なツインを作成する

  2. Bash:タイムアウトで待機

  3. 使用可能なすべてのネットワーク インターフェイスのデバイス名のみを一覧表示する

  1. Bash -cと位置パラメータ?

  2. Bashの文字列/配列から一意の要素の配列を作成するにはどうすればよいですか?

  3. すべてのファイルを取得しますが、ファイルは配列内にあります– Bash?