#!/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脚本中实现它的最佳方法是什么?
谢谢!
答案 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