열린 포트를 확인하기 위한 간단한 bash 스크립트

열린 포트를 확인하기 위한 간단한 bash 스크립트

나는 bash에서 다음 스크립트를 작성했습니다.

probe='nc -zv localhost 19997'
output=' grep -c 'succeeded' $probe'
if [ $output == '0' ]
then
     echo 'Client online'
else
     echo 'Offline'
fi

이 스크립트의 목적은 클라이언트가 역방향 SSH를 통해 포트 19997의 내 서버에 연결되어 있는지 netcat을 통해 확인하고 이것이 감지기이면 긍정적인 메시지를 인쇄하는 것입니다. CNC는 인쇄할 수 있습니다

 Connection to localhost 19997 port [tcp/*] succeeded!

클라이언트를 감지하면 설정된 연결에 대한 키워드로 'succeeded'를 grep하고 grep의 종료 코드로 if 문을 트리거하고 싶습니다. 하지만 이 스크립트를 실행하면 다음과 같은 결과가 나타납니다.

test.sh: line 3: [: too many arguments

내가 뭘 잘못했나요?

답변1

다음과 같이 명령 결과를 직접 테스트할 수 있습니다.

if ( nc -zv localhost 19997 2>&1 >/dev/null ); then
    echo 'Online'
else
    echo 'Offline'
fi

서브케이싱은 ( ... )필수는 아니지만, 이런 청결도 테스트를 할 때 사용하는 걸 좋아합니다.

종료 코드 및 테스트에 대한 자세한 내용은 다음을 참조하세요.

관련 정보