内部スクリプトの出力によって bash ループを中断するにはどうすればよいですか?

内部スクリプトの出力によって bash ループを中断するにはどうすればよいですか?

次のような一連のスクリプトを実行する単純なbashループがあります。

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

loopスクリプトからoutput echoedを壊すことは可能ですか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 に感謝します。変更しました (彼がそう思ってくれたことを願っています :-) )

関連情報