我想为我的作业测试我的代码,但我一直遇到这个问题
floor=54
ceiling=116
num=0
while [ $num -ne 100 ]
num=0
do
while [ $num -le $floor ]
do
num=$RANDOM
let "num %= $ceiling"
done
echo $num
done
从内循环可以看出,目标是生成[55, 155]
范围内的随机数。外环内部和内环外部的所有内容都只是用于测试实际代码。现在我想检查我的原始循环是否可以同时生成55
和155
。我尝试使用100
进行测试,因为我使用55
进行的原始测试只是继续进行,而100是一个更容易识别外部循环是否有效的数字。它没有。我发现100
,但外部循环不断产生更多数字。
我在这里做错了什么?
答案 0 :(得分:0)
您将num=0
置于while
循环的条件下(即do
之前。这意味着测试几乎被忽略,因为num=0
总是如此成功后,条件的退出状态始终为0,导致无限循环。您需要
while [ "$num" -ne 100 ]
do
num=0
...
这是一个微妙的错误,部分原因是条件可以是任意命令列表。这是我希望do
与while
位于同一行的一个原因:
while [ "$num" -ne 100 ]; do
num=0
这使得你更难以认为你在条件中包含num=0
而不是你写的
while [ "$num" -ne 100; num=0; do
...