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