私はプログラミングが初めてで、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
ifconfig
IPアドレスが保存されるように出力を操作する方法が必要です。これを達成するための最良の方法は何ですか?
答え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
使用することをお勧めします。特にここではそうです。ip
ip addr