如何通过内部脚本的输出来中断 bash 循环?

如何通过内部脚本的输出来中断 bash 循环?

我有一个简单的 bash 循环,运行一系列脚本

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

是否可以loop通过脚本output echo中的 ed来打破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 的回答,你也可以说

#!/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 的建议。我改变了它(我希望他是认真的:-))

相关内容