为什么 Bash 不将我的变量添加在一起?

为什么 Bash 不将我的变量添加在一起?

我正在编写一个 shell 脚本来计算文件中数字的平均值,但由于某种原因 bash 没有将我的数字加在一起。

我尝试了多种格式化 sum='expr $sum + $num' 的方法,但不断出现错误。

while read line
do  
    sum=0
    count=0
    average=0
    median=0

    #read each line, sort it and put it into tempRows file
    echo "$line" >> $tempRow
    sort $tempRow

    #add each number to the sum for avg calculation
    for i in $tempRow
        do
        num=$i
        count=`expr $count + 1`
        echo "count: $count"
        sum=`expr $sum + $num`
        echo "sum: $sum"    
        done

    #perform and print average calc at the end of each line
    average=`expr $sum / $count`

    echo -e "$average\t"

    rm -f $tempRow
done < $tempFile

目前这段代码在退出之前给了我以下输出

count: 1
expr:non-numeric argument
sum:
expr:syntax error

我在添加到 tempRow 以便以后进行中值计算之前对每一行进行排序示例文件将包含多个行和列的整数,我将打印出每行的平均值和中值

答案1

跑步bash -x myscript。这将为您提供执行的踪迹,从而使问题变得清晰。

你的主要问题是

for i in $tempRow

该变量$tempRow包含一个文件名。假设文件名不包含任何空格或通配符,则$tempRow扩展为包含一个单词的列表,即该文件名。因此 for 循环体运行一次,并i设置为文件名。

看来您想要迭代文件的行。用于while read此。更确切地说,while IFS= read -r i; do …

一些额外的提示:

相关内容