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