我正在写一个bash脚本,掷2个骰子(有6个面)。当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?
提前感谢!
发布于 2015-11-04 09:43:34
我不会对你的代码中的其他潜在问题发表太多评论,比如dice$2
“变量”,或者你可以用稍微简单一点的((num = $RANDOM % 6 + 1))
生成一个介于1和6之间的随机数-修复/改进这些问题的学习过程将使你成为一名更好的程序员。
但是,对于如何维护计数的具体问题,这是相对简单的。在循环开始之前,插入以下代码以将计数初始化为零:
((count = 0))
然后,随着两个骰子的每一次掷出,使用以下方法来递增计数:
((count = count + 1))
如何做到这一点的示例可以在下面看到。它是用来从一数到十的,但你应该明白这个意思:
((count = 1))
while [[ ${count} -le 10 ]] ; do
echo $count
((count = count + 1))
done
为了它的价值(如果这是一个课堂作业问题,不要使用它,你会认为教育工作者不会在网上搜索抄袭),下面是我如何实现这样一个野兽的方法:
#!/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}"
发布于 2021-10-05 06:29:52
为此,我建议使用shuf
。
#!/bin/bash
declare -i count=1
while [ "6 6" != "$(shuf --input-range='1-6' -r -n 2 | xargs)" ]; do
(( ++count ))
done
echo "It took $count rolls to get double six."
为了生成1到6之间的两个随机数,我们使用
shuf --input-range='1-6' -r -n 2
shuf [OPTION]... [FILE]
将输入行的随机排列写入标准输出。每个输出排列的可能性都是相等的。-i lo-hi
或--input-range=lo-hi
的作用就像输入来自包含无符号十进制整数范围lo-hi
的文件一样,每行一个。-r
或--repeat
重复输出值,即选择替换。使用此选项,输出不是输入的排列;相反,从所有输入中随机选择每一条输出行。-n count
或--head-count=count
在大多数count
行输出(默认情况下,输出所有输入行)。如果没有给出--head-count
,则无限期重复shuf。
键入man shuf
或查看coreutils manual以了解更多详细信息。
https://stackoverflow.com/questions/33512276
复制相似问题