【问题标题】:How to write script for arithmetic mean of even numbers如何编写偶数算术平均值的脚本
【发布时间】:2020-12-24 15:50:01
【问题描述】:

我必须在 bash 中编写一个脚本,我必须在表格中提供 10 个数字。然后脚本必须写出偶数的内容和算术平均值。我确实喜欢 90% 的脚本,但我不知道如何提取算术平均值所需的偶数数量信息。

这是我的代码:

echo "Provide data:"
i=0
for (( i = 0 ; i < 10; i++ ))
do
echo "Provide $[$i+1] number:"
read x
if [ "$x" = "" ]
then
 break
else
 table[$i]=$x
fi

done

echo "Provided data: ${table[*]}" 


result=0


for (( i = 0 ; i < 10; i++))
do
 res=$[${table[i]}%2]

 if [ $res -eq 0 ]
 then
 echo "Number ${table[i]} is even"
 result=$[$result+${table[$i]}]
 fi
done

echo "SUM:$[$result]"

【问题讨论】:

  • 请在您的问题中添加示例输入(无描述、无图像、无链接)以及该示例输入所需的输出(无评论)。
  • 我不知道我是否理解正确,例如输入:1,2,3,4,5,6,7,8,9,10 输出:算术平均值 = 2+4 +6+8+10 = 30 / 5 = 6
  • 他们打算将其编辑到问题中。许多人不阅读 cmets 来寻找问题/示例。

标签: linux bash shell command-line command


【解决方案1】:

忽略数据输入仅添加奇数输入可能如下所示:

$ cat c.sh
 
#!/bin/bash
declare -A xDarray
sum=0 
xDarray[0 1]=1
xDarray[0 2]=3
xDarray[1 0]=2
xDarray[2 0]=4
 
 
for var in ${xDarray[@]}
do
        if [ $(( $var & 1 )) == 0 ] ; then
                echo $var is even
                i+=1
                tab[$i]=$var
                sum=$(( $sum + $var))
        fi
done

var=$(echo ${tab[@]} | sed 's/ / + /g' )
echo $var = $sum 

结果

$ ./c.sh
2 is even
4 is even
2 + 4 = 6
$

无论使用多少数据,它都会起作用 我让你解决你的数据输入问题

【讨论】:

    【解决方案2】:

    这里有一些建议修改你的脚本,语法很简单。

    #!/bin/bash
    
    arr=()
    
    for (( i=1;i<=10;i++ )); do
        number=''
        while [[ ! $number =~ ^[0-9]+$ ]]; do
            printf "Please enter number $i:\n"
            read number
        done
        arr+=($number)
    done
    
    printf "\nProvided numbers:"
    printf " %d" "${arr[@]}" 
    printf "\nEven numbers:"
    
    s=0
    n=0
    for x in "${arr[@]}"; do
        if ! (( x % 2 )); then
            printf " %d" "$x"
            s=$(( s + x ))
            (( n++ ))
        fi
    done
    
    m=$(( s / n ))
    printf "\nMean of the %d even numbers: %d / %d = %d\n" "$n" "$s" "$n" "$m"
    

    使用数组arr 来保存输入数字,用arr=() 声明,用arr+=($x) 附加数字,我们只引用${arr[@]} 来表示所有项目,我们避免任何其他复杂的数组引用、索引等。

    每个输入 number 都针对 regular expression ^[0-9]+$ 进行测试,这意味着使用 =~ 运算符的一个或多个数字(并且只有数字),如果不是这样,我们会再次提示输入相同的 @987654332 @输入数字。

    此外,我们更喜欢使用printf 进行打印。

    最后一个循环是标准数组循环,我们再次使用arithmetic expansion 语法来查找偶数,将它们加到总和中并获得它们的平均值(结果是整数)。

    如果要打印十进制结果,例如使用 2 个浮点数,您可以像这样使用 bcprintf "%f"

    m=$( bc <<< "scale=2; $s/$n" )
    printf "%.2f" "$m"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-01
      • 2019-10-17
      • 2011-12-04
      • 1970-01-01
      相关资源
      最近更新 更多