Как разорвать цикл bash с помощью вывода внутреннего скрипта?

Как разорвать цикл bash с помощью вывода внутреннего скрипта?

У меня есть простой цикл bash, запускающий ряд скриптов, как

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

Можно ли вырвать loopЭд output echoиз 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's ответ, можно также сказать

#!/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 за советы. Я изменил его (надеюсь, так, как он имел в виду :-) )

Связанный контент