내부 스크립트 출력으로 bash 루프를 중단하는 방법은 무엇입니까?

내부 스크립트 출력으로 bash 루프를 중단하는 방법은 무엇입니까?

일련의 스크립트를 실행하는 간단한 bash 루프가 있습니다.

#!/bin/bash
for (( c=0; c<=200; c++ ))
do  
php ./script.php $1
done

스크립트 에서 ed loop를 깰 수 있습니까 ?output echophp

답변1

아마도 이런 뜻이겠죠?

#!/bin/bash
for (( c=0; c<=200; c++ ))
do
    output=$(php ./script.php "$1")
    case $output in
      *'foo'*) echo "Loop terminated"; break;; 
    esac
    echo "$output"
done

에서 영감을 받다@Archemar의 답변, 당신은 또한 말할 수 있습니다

#!/bin/bash
for (( c=0; c<=200; c++ ))
do
    ! php ./script.php "$1" | grep -v 'foo' || break
done

답변2

script.php가 0이 아닌 다른 것을 반환할 수 있는 경우.

 ...
 do
 if ! php ./script.php $1
 then break 
 fi
 done
  • ./script.php 앞에 필요한지 잘 모르겠습니다.
  • 나는 또한 당신의 루프 구문에 대해 확신하지 못합니다. bash에 대해 뭔가를 배웁니다.

"출력"을 필터링하려면

if php script.php $1 | grep --quiet output
then break
fi

이런 식으로 반환 코드를 grep제공하는 것 입니다.if

답변3

다음과 같이 시도해 볼 수 있습니다.

output=$(php script.php "$1")
if [ $output = "{End output}" ]
then
     break
fi

이제 다음과 같은 방법으로 PHP 스크립트를 변경하기만 하면 됩니다.

...
echo '{End output}';
...

업데이트:

조언해주신 Tripleee님께 감사드립니다. 변경했습니다(그가 진심으로 말한 것 같기를 바랍니다 :-) )

관련 정보