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

0

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 dividir o loop pelo output echo ed do script php ?

    
por Googlebot 29.04.2017 / 15:24

3 respostas

2

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 pela @ resposta do Archemar , você também pode dizer

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

se script.php puder retornar algo diferente de 0.

 ...
 do
 if ! php ./script.php $1
 then break 
 fi
 done
  • Não sei se você precisa de ./ na frente de script.php
  • Eu também não tenho certeza da sua sintaxe de loop Eu aprendo algo sobre o bash

para filtrar a "saída"

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

Dessa forma, isso é grep , que fornece if do código de retorno.

    
por 29.04.2017 / 15:39
0

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 maneira:

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

Atualização:

Graças a triplo para os conselhos. Eu mudei (espero que ele tenha dito isso :-))

    
por 29.04.2017 / 15:38