인덱스에 따라 증가하는 변수를 저장하는 방법은 무엇입니까?

인덱스에 따라 증가하는 변수를 저장하는 방법은 무엇입니까?

저는 프로그래밍이 처음이고 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

관련 정보