저는 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
)은 성공을 나타내는 데 사용되고 다른 값은 실패를 나타내는 데 사용됩니다. 이 반환 코드는 으로 사용할 수 있습니다 $?
.
ifconfig
stdout
예를 들어 다음과 같이 출력됩니다 .
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
반환 코드( )는 '의 반환 코드가 아니라 '의 반환 코드 $?
가 됩니다 . 이를 처리하려면 임시 변수에 할당하기만 하면 됩니다.echo
ifconfig
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/ .*$//'