这是我到目前为止所拥有的。如何合并计数以在每次循环完成时获取用户输入并将它们加在一起并创建输入的平均值?
#!/bin/bash
#Variables
lower=1
middle=50
higher=100
notdone=true
while [ $notdone ]; do
#Pick a Number
echo "Please pick a number between 1 and 100: "
read input
#Loop until wiithin range
until [[ $input -ge $lower ]] && [[ $input -le $higher ]]; do
echo "Number not in range.
Please pick a number between 1 and 100: "
read input
done
echo "You picked $input"
if [[ $input -ge $middle ]]; then
echo "Your answer is in the top half"
fi
if [[ $input -le $middle ]]; then
echo "Your answer is in the top half"
fi
done
答案1
$count
回复您对问题的评论:在实际计算平均值之前您不需要。到那时,拥有就足够了
total=$(( total + input ))
这会将用户输入的内容添加到运行总计中。
然后平均值可以计算为$(( total / count ))
(注意,由于 shell 只进行整数算术,这将是一个整数,请参阅“如何在 bash 或其他语言/框架中进行整数和浮点计算?”)。
其他事情:
您的$notdone
变量设置为细绳 true
并且你在 中使用它while [ $notdone ]
。像这样的测试,在不带引号的字符串上,是脆弱的,你的while
循环条件最好写成
while [ "$notdone" = "true" ]
您还应该考虑在代码中引用所有其他变量扩展,例如
if [[ "$input" -ge "$middle" ]]; then
这在输入循环中尤为重要,否则您将通过输入中间有空格的内容来生成语法错误。
既然你使用的是bash
,上面也可以写成
if (( input >= middle )); then
你还缺乏退出主循环的方法,echo
最后都说“你的答案在顶部一半”。