Wie unterbricht man eine Bash-Schleife durch die Ausgabe eines internen Skripts?

Wie unterbricht man eine Bash-Schleife durch die Ausgabe eines internen Skripts?

Ich habe eine einfache Bash-Schleife, die eine Reihe von Skripten ausführt als

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

loopIst es möglich, das durch das output echoED aus dem Skript zu unterbrechen php?

Antwort1

Vielleicht meinen Sie so etwas?

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

Inspiriert von@Archemars Antwortkönnte man auch sagen

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

Antwort2

wenn script.php etwas anderes als 0 zurückgeben kann.

 ...
 do
 if ! php ./script.php $1
 then break 
 fi
 done
  • Ich bin nicht sicher, ob Sie es ./vor script.php brauchen.
  • Ich bin mir auch Ihrer Schleifensyntax nicht sicher. Ich habe etwas über Bash gelernt.

zum Filtern nach "Ausgabe"

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

Auf diese Weise wird der Rückgabecode grepzurückgegeben .if

Antwort3

Du könntest es folgendermaßen versuchen:

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

Nun müssen Sie Ihr PHP-Skript nur noch folgendermaßen ändern:

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

Aktualisieren:

Danke an tripleee für die Ratschläge. Ich habe es geändert (ich hoffe, er meinte es so :-) )

verwandte Informationen