Bash 스크립트에서 if 문의 인수로 사용하기 위해 "ifconfig"와 같은 Bash 명령의 반환 값을 사용하는 방법

Bash 스크립트에서 if 문의 인수로 사용하기 위해 "ifconfig"와 같은 Bash 명령의 반환 값을 사용하는 방법

저는 Bash 스크립팅에 비교적 익숙하지 않지만 Python과 많은 Bash 명령에 매우 익숙합니다. 와 같은 명령을 사용 ifconfig eno1하고 출력을 명령문에서 사용할 조건으로 사용할 수 있는지 궁금합니다 if. 기본적으로 다음을 발행하는 경우:

 ifconfig eno1

활성 IP를 얻은 경우 그 출력을 변수에 1/0 또는 true/false로 저장하여 다음 if명령문 예제에서 사용할 수 있는 방법이 있습니까( ifoutput변수 이름이라고 가정):

 if [ "$ifoutput" == "$True"]

 then 
         echo connection is active! 
 fi

본질적으로 동일한 작업을 수행하는 Python 스크립트를 호출할 수도 있다고 생각했지만 동일한 문제가 발생할 것이라고 생각했습니다. 명령문에 사용되는 Python 스크립트에서 개별 반환 값을 얻을 수 있는 방법이 없습니다 if. 조언해 주시고 편하게 대해주세요. 제가 말했듯이 저는 Bash 스크립팅에 비교적 익숙하지 않습니다! 나는 이미 Python을 사용하여 이 작업을 엄격하게 수행하는 방법을 가지고 있지만 Bash 스크립팅에 대해 더 많이 배우려고 노력하고 있습니다. 미리 감사드립니다!

답변1

ifconfig완료되면 숫자 8비트 값을 반환합니다(깨끗하게 종료되는 모든 *nix 프로세스와 유사).

일반적으로 0( 0)은 성공을 나타내는 데 사용되고 다른 값은 실패를 나타내는 데 사용됩니다. 이 반환 코드는 으로 사용할 수 있습니다 $?.

ifconfigstdout예를 들어 다음과 같이 출력됩니다 .

eth0      Link encap:Ethernet  HWaddr 02:42:ac:14:00:02
          inet addr:172.20.0.2  Bcast:172.20.255.255  Mask:255.255.0.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:20430143 errors:0 dropped:0 overruns:0 frame:0
          TX packets:20966475 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:46532669457 (46.5 GB)  TX bytes:44114090048 (44.1 GB)

ifconfig eth0성공 여부(예: 권한에 따라, 인터페이스가 존재하는지) 확인하려는 경우 다음 중 하나를 수행할 수 있습니다.

ifconfig eth0
if [ $? -eq 0 ]; then
  echo yay
fi
if ifconfig eth0; then
  echo yay
fi
ifconfig eth0 && echo yay

ifconfig의 출력을 숨기 려면 다음을 추가하면 됩니다 > /dev/null.

if ifconfig eth0 > /dev/null; then
  echo yay
fi

반환 코드 인쇄에 대해 문의하셨는데, 이는 초보자를 위한 문제입니다...

간단히 이렇게 할 수 있습니다:

ifconfig eth0
echo $?

그러나 을 호출한 후 echo반환 코드( )는 '의 반환 코드가 아니라 '의 반환 코드 $?가 됩니다 . 이를 처리하려면 임시 변수에 할당하기만 하면 됩니다.echoifconfig

ifconfig eth0
RET=$?
echo ${RET}
if [ ${RET} -eq 0 ]; then
  echo yay
fi

참고: [표현식을 평가할 수 있는 내장 명령이므로 대괄호( [/ ])는 실제로 구문의 일부가 아닙니다 if.

$ help [
[: [ arg... ]
    Evaluate conditional expression.

    This is a synonym for the "test" builtin, but the last argument must
    be a literal `]', to match the opening `['.

실제로 노력하고 있다면인터페이스의 IP 주소를 가져옵니다, 다음 중 하나와 같은 파이프라인을 사용할 수 있습니다(동일한 결과를 얻는 방법은 다양합니다).

ifconfig eth0 | grep -Eom1 'inet addr:([0-9]{1,3}\.){3}[0-9]{1,3}' | cut -d: -f2
ifconfig eth0 | sed -re '/inet addr:/!d;s/^[^:]+://;s/ .*$//'

관련 정보