bash - while循环 - 滚动2个骰子
我正在写一个bash脚本,掷2个骰子(6个边)。当两个骰子碰到两个六分球时,我希望脚本停下来(打破),并计算得到两个六分球所需的掷骰数。bash - while循环 - 滚动2个骰子
#!/bin/bash
DOUBLESIX="6-6"
while ((0 ==0)) ; do
dice=$RANDOM; ((dice = dice % 6)); ((dice = dice +1))
dice2=$RANDOM; ((dice2 = dice2 % 6)); ((dice = dice + 1))
pair="$dice-dice$2"
echo $pair
if [[ "$pair" == "$DOUBLESIX" ]]; then
break
fi
done
echo "It took $count rolls to get 6-6 "
这是我到目前为止。问题是,我如何计算while循环运行多少次并将其放入我的$ count中?
在此先感谢!
我不会过多地评论您在代码中遇到的其他潜在问题,例如dice$2
“变量”,或者您可以生成一个介于一到六之间的随机数字,其中包含一些简单的((num = $RANDOM % 6 + 1))
- 固定/改进这些内容的学习过程是什么使你成为一个更好的编码器。
但是,对于如何保持计数的具体问题,这是相对简单的。在循环开始之前,将下面的代码初始化计数为零:
((count = 0))
然后,两个骰子的每卷,使用以下方法来增加计数:
((count = count + 1))
一个例子如何做到这一点可以在下面看到。这是从一个数到十,但你应该得到的想法:
((count = 1))
while [[ ${count} -le 10 ]] ; do
echo $count
((count = count + 1))
done
对于它的价值(不使用这个,如果这是一个课堂作业的问题,你会疯狂到认为教育工作者不要“T搜索网抄袭),这里是我将如何实现这样一个东西:
#!/bin/bash
DESIRED="6-6"
((count = 0))
dice="NOT ${DESIRED}"
while [[ "${dice}" != "${DESIRED}" ]] ; do
((count = count + 1))
((die1 = $RANDOM % 6 + 1))
((die2 = $RANDOM % 6 + 1))
dice="${die1}-${die2}"
echo ${dice}
done
echo "It took ${count} rolls to get ${DESIRED}"
bash也有'((count ++))'如果简洁有价值。 –
谢谢!我只是在当前版本中添加了计数位,并且它可以工作。 你肯定是一个野兽=] – Duhhhh
我倾向于使用像冒号或空间或除减法运算符之外的东西来分隔值。没有太多的功能,但对于后来的代码阅读器。 :) – dannysauer
你确定这些循环检查都正常? – phk
如果你称第一个“dice1 =”而不是“dice =”,那么当你有“dice2”时你就不会有冲突的名字:) – racraman
如果你在变量名'$ {foo}像paxdiablo在他的回答中所做的那样,你不会遇到像racraman警告的名称冲突。 –