(standard_in)1:解析错误bash来计算记录的平均值

时间:2017-05-17 04:19:00

标签: bash function parsing while-loop

我一直在标准:解析器错误

#!bin/bash


file="0.txt"

if [ -f $file ] ; then
    rm $file
fi


for i in {1..4};
 do cat $i'_Node_770_01_Band_600_Min_Res.txt' >> 0.txt;
done

############# MAXIMUM ############
function maximum() {
   column="$1"
    awk '{print $'$column';}' 0.txt | sort -nr | head -n 1
    return 0
}

############MINIMUM#############
function minimum() {
    column="$1"
    awk '{print $'$column';}' 0.txt | sort -nr | tail -n 1
}   

############AVERAGE###########
function average(){
    max="$1"
    min="$2"
    div="2"
    diff=$(echo "scale=4; $max-$min" | bc)
    ave=$(echo "scale=4; $diff/$div" | bc)
    echo $ave
}

input="0"
while true; do
    read -p "Enter column [1-10] ('q' to quit): " input;

    if [ "$input" == "q" ];
        then
            clear
            echo "Goodbye!"
        break
    elif [ "$input" == "Q" ]; 
       then
            clear
            echo "Goodbye!"
        break
    elif (("$input" < "1")) || (("$input" > "10"));
        then
            clear
            echo -e "\t\t Try again"

    else
        #store maximum in variable max
        maximum $input read -r max
        #store minimum in variable min
        minimum $input read -r min
        #echo $min
        average $max $min 
    break
    fi

done

我认为解析器问题在函数平均值中。我不知道如何解决这个问题。我试过修理: max = $(最大$输入) min = $(最小$输入) 平均$ max $ min 无济于事。

1 个答案:

答案 0 :(得分:0)

解析错误来自bc命令,可能是未设置为空的结果,计算中使用的非数字变量;在这种情况下,罪魁祸首很可能是maxmin

示例:如果未设置maxmin,则提供默认(数字)值将阻止bc发出解析错误:

function average(){
  max="${1:-0}"
  min="${2:-0}"
  ...
}
  

理想情况下,您会在输入中加入一种强大的验证形式,这超出了问题的范围,但这有助于理解解析错误的基本原理。