내 VPS 머신의 IP를 변수에 넣어야 합니다. 내 말은 외부 IP 주소가 출력 값 inet addr
의 일부로 표시된다는 것입니다.ifconfig
나는 시도했다:
ipa="$(hostname -i)"
하지만 echo ${ipa}
이로 인해 localhost token: 이 발생했기 127.0.1.1
때문에 다른 솔루션을 찾았고, 내가 찾은 모든 솔루션에는 내가 전혀 알지 못하는 많은 awk
파이프와 작업이 포함되어 있었습니다(한 번도 사용한 적이 없으며 awk
정규 표현식에 익숙하지 않습니다).
나는 이것을 시도했습니다 :
ipa=$(ifconfig | grep "inet addr:[0-999]\.[0-999]\.[0-999]\.[0-999]")
그러나 출력이 빈 줄 이므로 echo ${ipa}
실패합니다 .
내가 시도한 것이 왜 실패했습니까? 아니면 적어도 어떻게 고치겠습니까?
답변1
ipa=$(ifconfig | perl -lane '/inet addr:(\S+)/ and $1 !~ "^127" and print $1')
또한보십시오여기많은 대안이 있습니다. 예를 들어 다음을 사용합니다 grep
.
ipa=$(ifconfig | grep -Po 'inet addr:\K[^\s]+' | grep -v '^127')
설명하다:
ipa=$( )
괄호 안의 명령 출력을 showinterfaces 변수 ipa
ifconfig
와 해당 주소에 할당합니다. ip address
| grep -Po 'inet addr:\K[^\s]+'
호환되는 정규 표현식을 사용하여 출력을 필터링 perl
하고 일치하는 텍스트 필터를 다시 인쇄하는 것을 선호할 수 있습니다
| grep -v '^127'
. 이번에는 -v
( )로 시작하는 ^
값을 제외합니다.127
외부 IP를 얻으려면 일반적으로 다음을 수행합니다.
dig +short myip.opendns.com @resolver1.opendns.com
답변2
grep "inet addr:[0-999]\.[0-999]\.[0-999]\.[0-999]"
inet addr:
이는 문자열 뒤에 to, a 또는 a의 숫자인 단일 문자, 그 뒤에 점이 온 다음 to 또는 or의 다른 문자가 오는 문자열과 일치하지만 , 예를 들어 일치하지 않습니다.0
9
9
9
0
9
9
9
inet addr:1.2.3.4
inet addr:11.22.33.44
대괄호 그룹은 숫자를 구성하는 문자열과 일치하지 않고 단일 문자만 일치합니다.