Como quebrar um loop bash pela saída de um script interno?

Como quebrar um loop bash pela saída de um script interno?

Eu tenho um loop bash simples executando uma série de scripts como

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

É possível quebrar o looped output echodo phpscript?

Responder1

Talvez você queira dizer algo assim?

#!/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

Inspirado porResposta de @Archemar, você também poderia dizer

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

Responder2

se script.php puder retornar algo diferente de 0.

 ...
 do
 if ! php ./script.php $1
 then break 
 fi
 done
  • Não tenho certeza se você precisa ./na frente do script.php
  • Também não tenho certeza da sintaxe do seu loop, aprendi algo sobre o bash

para filtrar por "saída"

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

desta forma, é isso grepque dá ifo código de retorno.

Responder3

Você poderia tentar assim:

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

Agora você só precisa alterar seu script PHP desta forma:

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

Atualizar:

Obrigado ao tripleee pelos conselhos. Eu mudei (espero que ele quis dizer isso :-))

informação relacionada