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

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

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

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

loop스크립트 output echo에서 ed를 통해 중단할 수 있습니까 php?

답변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에게 감사드립니다. 바꿨어요(그가 진지했으면 좋겠어요 :-))

관련 정보