2015-11-04 47 views
1

我正在寫一個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警告的名稱衝突。 –

回答

2

我不會過多地評論您在代碼中遇到的其他潛在問題,例如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