¿Cómo romper un bucle bash mediante la salida de un script interno?

¿Cómo romper un bucle bash mediante la salida de un script interno?

Tengo un bucle bash simple que ejecuta una serie de scripts como

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

¿Es posible separar el loopguión output echodel phpguión?

Respuesta1

¿Quizás te refieres a algo como esto?

#!/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 porLa respuesta de @Archemar, también se podría decir

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

Respuesta2

si script.php puede devolver algo diferente a 0.

 ...
 do
 if ! php ./script.php $1
 then break 
 fi
 done
  • No estoy seguro de que lo necesites ./delante de script.php
  • Tampoco estoy seguro de la sintaxis de tu bucle. Aprendo algo sobre bash.

para filtrar por "salida"

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

De esta manera, esto es greplo que da ifel código de retorno.

Respuesta3

Podrías intentarlo así:

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

Ahora sólo tienes que cambiar tu script PHP de esta manera:

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

Actualizar:

Gracias a tripleee por los consejos. Lo cambié (espero que fuera en serio :-))

información relacionada