컴퓨터 이름 및 로컬 네트워크와 관련된 스크립트 실행 중 오류가 발생했습니다.

컴퓨터 이름 및 로컬 네트워크와 관련된 스크립트 실행 중 오류가 발생했습니다.

컴퓨터 이름을 명령줄 인수로 사용하고 호스트가 로컬 네트워크에 있는지 알려주는 메시지를 표시하는 스크립트를 작성하려고 합니다.

이것이 내가 가진 것입니다:

#!/bin/bash
gateway=$(ip route | grep default | cut -d' ' -f3)

if [[ $(ip route get "$1" | grep -q $gateway) ]]; then

echo "$1 is on the local network"

else

echo "$1 is not on the local network"

fi 

내 컴퓨터 이름(ubuntu)을 사용하여 실행할 때마다 다음과 같은 출력이 표시됩니다.

Error: any valid prefix is expected rather than "ubuntu".
ubuntu is not on the local network

이 오류가 무엇을 의미하는지, 왜 오류가 발생하는지, 스크립트가 예상한 대로 작동하는지 잘 모르겠습니다. 어떤 조언이라도 대단히 감사하겠습니다. 감사해요!

답변1

내 Ubuntu Linux에서 IP 주소는 네 번째 필드에 있습니다. 절단 분리기가 귀하의 아이디어와 일치하는지 확인하십시오

ip r | grep default && ip r | grep default | cut -d' ' -f3 && ip r | grep default | cut -d' ' -f4
none default via 192.168.1.1 dev eth1  proto none  metric 0
via
192.168.1.1

답변2

기계가 동일한 (하위) 네트워크에 있는지 확인하려면 해당 주소가 주소 마스크 내에 있는지 확인해야 합니다. 이를 필드 ip addr에 표시하십시오 .brd

traceroute또 다른 더 교활한 방법은 예를 들어 말하는 내용을 보는 것입니다 .

관련 정보