BASHスクリプトを使用して、3番目のソースからコンソールに表示される出力を読みますか?

BASHスクリプトを使用して、3番目のソースからコンソールに表示される出力を読みますか?

readユーザー入力の代わりにコンソールから情報を「読む」方法を理解するのに問題があります。効果的に「ラインを得ること」?コンソールから。

これが私のシナリオです。echo "information" | ncat "IP" "PORT"正しい情報をキャプチャするためにデーモンを実行しながら、ネットワーク内部のポートに送信しています。

間違った情報を送信すると、誤った情報を送信したという事前定義されたメッセージを受信して​​再試行します。しかし、情報が正しい場合は、他の答えが出て、どのような答えなのかわかりません。

以下は、これまで試したBASHスクリプトの一部です。

if [[read -r line ; echo "$line" ; while "$line" == "Information wrong try again!"]] ; continue
elif [[read -r line ; echo "$line" ; while "$line" != "Information wrong try again!"]] ;break

私はbashに最初に触れたので、私が使用する構文が正しくない可能性があります。

ベストアンサー1

あなたの文法がすべて間違っているようです。私はあなたが次のようなものを探していると思います。

if [ "$line" = "Information wrong try again!" ]; then
  echo "Try again"
else
    echo "All's well"
fi

もちろん、詳細はスクリプトの実行方法によって異なります。無限ループになり、echo "information" | ncat "IP" "PORT"動作するまでコマンドを再実行するには、次の手順を実行する必要があります。

line=$(echo "information" | ncat "IP" "PORT")
while [ "$line" = "Information wrong try again!" ]; do
    line=$(echo "information" | ncat "IP" "PORT")
    sleep 1 ## wait one second between launches to avoid spamming the CPU
done

## At this point, we have gotten a value of `$line` that is not `Information wrong try again!`, so we can continue. 
echo "Worked!"

または同様に:

while [ $(echo "information" | ncat "IP" "PORT") = "Information wrong try again!" ]; do
    sleep 1 ## wait one second between launches to avoid spamming the CPU
done

## rest of the script goes here
echo "Worked!"

おすすめ記事