如何透過內部腳本的輸出來中斷 bash 迴圈?

如何透過內部腳本的輸出來中斷 bash 迴圈?

我有一個簡單的 bash 循環,運行一系列腳本

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

是否可以從腳本中打破looped ?output echophp

答案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 的回答,你也可以說

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

答案2

if 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 的建議。我改變了它(我希望他是認真的:-))

相關內容