我一直在标准:解析器错误
#!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 无济于事。
答案 0 :(得分:0)
解析错误来自bc
命令,可能是未设置,为空的结果,计算中使用的非数字变量;在这种情况下,罪魁祸首很可能是max
和min
。
示例:如果未设置max
和min
,则提供默认(数字)值将阻止bc
发出解析错误:
function average(){
max="${1:-0}"
min="${2:-0}"
...
}
理想情况下,您会在输入中加入一种强大的验证形式,这超出了问题的范围,但这有助于理解解析错误的基本原理。