インデックスに応じて増加する変数を保存する方法は?

インデックスに応じて増加する変数を保存する方法は?

私はプログラミングが初めてで、bashで増加した変数を保存して印刷する方法を知りたいです。

#!/bin/bash
ethcounter=$(ifconfig -a | egrep --count "eth")
ethindex0=$((ethcounter-1))

echo ethindex0 = $ethindex0

for ((i=0; i<=ethindex0; i++))
 do
    eth[$i]=$(ifconfig eth$i)
    echo "eth[$i]" = "$eth[$i]"
 done

ここでの究極の目標は、ifconfigを実行したときに表示されるすべてのethデバイスのIPアドレスを保存することです。

eth0 = ifconfig eth0 ... IP address
eth1 = ifconfig eth1 ... IP address

ifconfigIPアドレスが保存されるように出力を操作する方法が必要です。これを達成するための最良の方法は何ですか?

ベストアンサー1

多くのことを行う必要はなく、eth変数を配列として宣言してアクセス方法を変更するだけです。

#!/bin/bash
ethcounter=$(ifconfig -a | egrep --count "eth[0-9]+")
ethindex0=$((ethcounter-1))
declare -a eth

echo ethindex0 = $ethindex0

for ((i=0; i<=ethindex0; i++))
 do
    eth[$i]=$(ifconfig eth$i)
    echo "eth[$i]" = "${eth[$i]}"
 done

egrepまた、「ether」という単語を含む行と一致するので、パラメータを少し調整しました。もちろん、もっと時間がかかるかもしれませんが、自分で見つけようとすることができます。

Jordanがコメントで正しく指摘したように、インターフェイスが順番に番号付けされていると仮定しないでください。grep必要なものはすべて破棄して取得したすべての値を処理して、連想配列(番号ではなくインタフェース名でインデックス付けされている)に保存する必要があります。

注:インターフェイスには複数のIPアドレスがあります。使用されなくなった場合は、代わりにifconfig使用することをお勧めします。特にここではそうです。ipip addr

おすすめ記事