다음 링크에는 시스템 정보를 가져오는 스크립트가 있습니다.
구체적으로,
network() {
read lo int1 int2 <<< `ip link | sed -n 's/^[0-9]: \(.*\):.*$/\1/p'`
if iwconfig $int1 >/dev/null 2>&1; then
wifi=$int1
eth0=$int2
else
wifi=$int2
eth0=$int1
fi
ip link show $eth0 | grep 'state UP' >/dev/null && int=$eth0 ||int=$wifi
#int=eth0
ping -c 1 8.8.8.8 >/dev/null 2>&1 &&
echo "$int connected" || echo "$int disconnected"
}
방금 실행하면 :
ip link | sed -n 's/^[0-9]: \(.*\):.*$/\1/p'
(예상대로) 인터페이스 목록을 얻습니다.
하지만 내가 실행하면
read lo int1 int2 <<< `ip link | sed -n 's/^[0-9]: \(.*\):.*$/\1/p'`
나는 아무것도 얻지 못했습니다. $lo
, $int1
, , 를 확인해 보니 $int2
여전히 아무 것도 없었습니다. 읽기가 예상대로 진행되지 않는 것 같습니다.
이 문제를 해결하기 위한 제안이 있는 사람이 있습니까? 나는 그것을 디버깅하는 방법을 실제로 알기에는 읽기에 대해 충분히 알지 못합니다.
답변1
for
배열과 함께 -loop를 사용해 보세요 read
.
for link in `ip link | sed -n 's/^[0-9]: \(.*\):.*$/\1/p'`
do
int[${#int[*]}]=$link
done
따라서 쉘이 배열을 지원하지 않으면 다음을 받게 됩니다 ${int[1]}
.${int[2]}
i=0
for link in `ip link | sed -n 's/^[0-9]: \(.*\):.*$/\1/p'`
do
eval int$i=$link
let i+=1
done