循环时使用PHP退出代码退出shell脚本?

时间:2014-01-02 19:13:04

标签: php shell for-loop

#!/bin/bash
cd  /maintenance;

for (( i=1;i<1000;i++)); do
    php -q dostuff.php $i    
done

我使用此shell脚本调用dostuff.php脚本,并将$i作为agrv传递给脚本。该脚本连接到一次返回结果50项的Web服务。 $i值是页码...我无法知道需要调用多少次(多少页),直到我从我测试的脚本中的CURL返回响应代码。我需要将自己的响应代码传递回shell脚本以使其停止循环...它永远不会达到1000次迭代......这只是我做的一个快速循环。

如果我使用exec("php -q dostuff.php $i", $output, $return_var),如何告诉脚本继续执行并传递递增的$i值,直到我的php脚本以响应代码0退出?

必须有更好的方法。也许一段时间?这种语法就不那么好了。

我必须从第1页开始并重复直到第XXX页每次迭代递增1。当没有更多结果时,我可以在dostuff.php和退出(0)中对此进行测试。在shell脚本中实现它的最佳方法是什么?

谢谢!

2 个答案:

答案 0 :(得分:1)

您可以检查脚本的返回值,如果不是预期的话,可以break循环。

通常,脚本在成功运行时返回0,否则返回其他内容,因此如果我认为您的脚本遵循这种情况,您可以这样做:

#!/bin/bash
cd  /maintenance;

for (( i=1;i<1000;i++)); do
  php -q dostuff.php $i
  if [ $? -ne 0 ]; then break; fi 
done

另一方面,如果你希望你的脚本在循环的情况下返回0,那么你应该这样做:

if [ $? -eq 0 ]; then break; fi

编辑:将评论考虑在内以简化脚本:

如果您的脚本在不应再次调用时返回0,则执行以下操作:

#!/bin/bash
cd  /maintenance;

for (( i=1;i<1000;i++)); do
  if php -q dostuff.php $i; then break; fi 
done

答案 1 :(得分:0)

正如评论中已经提到的,如果你不将php脚本包装在bash脚本中,而是使用php-cli作为shell脚本(PHP有点shell),你可能会得到更好的控制:

#!/usr/bin/php
<?php
for ($i = 0; $i < 1000; $i++) {
    // contents of dostuff.php integrated
}

您可能也有兴趣使用STDOUT,STDIN和STDERR:

http://php.net/manual/en/features.commandline.io-streams.php