開いているポートを確認するための単純な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

サブケーシングは( ... )必須ではありませんが、こんな清潔度テストをするときに使うのが好きです。

終了コードとテストの詳細については、次を参照してください。

関連情報