【发布时间】:2015-03-05 04:15:34
【问题描述】:
我需要请求一个页面 n 次并计算返回的错误页面数
ITERATIONS=100000
COUNTER=0;
COUNT_ERROR=0;
COUNT_EXPECTED=0;
while (( $COUNTER < $ITERATIONS )); do
COUNTER=$((COUNTER + 1));
curl http://www.example.com/example/path | grep -cim1 error;
if (( $? == 0 )); then
COUNT_ERROR=$((COUNT_ERROR + 1))
else
COUNT_EXPECTED=$((COUNT_EXPECTED + 1))
fi;
sleep 0.1;
done;
echo COUNT_ERROR=$COUNT_ERROR COUNT_EXPECTED=$COUNT_EXPECTED
这个脚本正在返回
COUNT_ERROR=0 COUNT_EXPECTED=0
...所以 if 子句没有按预期执行
这是修订版(基于三元组的 cmets):
iterations=100000; count_error=0; count_expected=0; for ((counter = 0; counter < iterations; ++counter)); do if curl http://www.example.com/example/path | grep -iq error; then count_error=$((count_error + 1)) else count_expected=$((count_expected + 1)); fi; sleep 0.1; done; echo count_error=$count_error count_expected=$count_expected
但是输出仍然是
count_error=0 count_expected=0
注意:测试机器包括 Windows 7 w/CygWin 和 MBP OSX Yosemite
这是完整的输出:
bash-3.1$ iterations=10; count_error=0; count_expected=0; for ((counter = 0; counter < iterations; ++counter)); do if curl http://www.example.com/example/path
| grep -iq jetty; then count_error=$((count_error + 1)) else count_expected=$((count_expected + 1)); fi; sleep 0.1; done; echo count_error=$count_error count_e
xpected=$count_expected
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 114k 100 114k 0 0 431k 0 --:--:-- --:--:-- --:--:-- 431k
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 114k 100 114k 0 0 666k 0 --:--:-- --:--:-- --:--:-- 666k
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 114k 100 114k 0 0 735k 0 --:--:-- --:--:-- --:--:-- 735k
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 114k 100 114k 0 0 490k 0 --:--:-- --:--:-- --:--:-- 490k
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 114k 100 114k 0 0 408k 0 --:--:-- --:--:-- --:--:-- 408k
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 114k 100 114k 0 0 735k 0 --:--:-- --:--:-- --:--:-- 735k
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 114k 100 114k 0 0 735k 0 --:--:-- --:--:-- --:--:-- 735k
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 114k 100 114k 0 0 565k 0 --:--:-- --:--:-- --:--:-- 565k
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 114k 100 114k 0 0 432k 0 --:--:-- --:--:-- --:--:-- 432k
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 114k 100 114k 0 0 925k 0 --:--:-- --:--:-- --:--:-- 925k
count_error=0 count_expected=0
bash-3.1$
【问题讨论】:
-
您的原始代码本身没有问题;您稍后发布的单行代码不应该工作,因为在
else之前缺少;。 -
也许添加
set -x(和curl -s让它安静下来)并复制粘贴准确你运行的内容和它产生的输出。 -
感谢 mklement0 在
else修复之前丢失的; -
现在它正在工作,我发现高度非线性的响应曲线......大约 1 秒内迭代 10 次,但 100 次迭代不是 10 秒,更像是 20 秒,而 1000 次则不是100 秒,更像是 5 分钟
-
@BaltoStar:很高兴语法问题得到解决;我已经在答案中总结了结果;至于时间问题:我建议你做更多的调查,然后问一个单独的问题。
标签: bash if-statement syntax