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!"