私は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
サブケーシングは( ... )
必須ではありませんが、こんな清潔度テストをするときに使うのが好きです。
終了コードとテストの詳細については、次を参照してください。