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中?

在此先感谢!

+0

你确定这些循环检查都正常? – phk

+1

如果你称第一个“dice1 =”而不是“dice =”,那么当你有“dice2”时你就不会有冲突的名字:) – racraman

+0

如果你在变量名'$ {foo}像paxdiablo在他的回答中所做的那样,你不会遇到像racraman警告的名称冲突。 –

我不会过多地评论您在代码中遇到的其他潜在问题,例如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}" 
+1

bash也有'((count ++))'如果简洁有价值。 –

+0

谢谢!我只是在当前版本中添加了计数位,并且它可以工作。 你肯定是一个野兽=] – Duhhhh

+0

我倾向于使用像冒号或空间或除减法运算符之外的东西来分隔值。没有太多的功能,但对于后来的代码阅读器。 :) – dannysauer