【发布时间】:2017-10-16 08:42:51
【问题描述】:
我不断得到标准:解析器错误
#!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 无济于事。
【问题讨论】:
-
#!bin/bash => #!/bin/bash
-
max=$(maximum $input) 是对的。 'read', '-r', 'max' 只是函数的参数。为最大值和最小值添加空值异常处理。
-
作为
if [ -f $file ]块的简写,您可以简单地使用:>"0.txt"来截断(清空)文件(如果存在)或创建一个空文件(如果存在)不是。通常,您希望双引号与test(例如[...])一起使用的任何变量,以防止在变量包含空格或为空时出错。 (这里你在测试上方明确设置了file,所以没有任何可能,但这是一种很好的做法)。如果您想避免引用,请使用[[...]]。 -
@thatseeyou,您可以在 cmets 中用 backticks (例如
'`')将代码部分设置为固定宽度字体并设置灰白色背景. (仅供将来参考)。在您的答案中也是如此。 -
我恢复到上一行代码:
function average(){ div="2" diff=$(echo "scale=4; $1-$2" | bc) ave=$(echo "scale=4; $diff/$div" | bc) echo $ave },只是为了表明我正在解析的值是数字,这是我收到的消息:输入列 [1- 10] ('q' 退出): 4 -83.3873 -88.7882 (standard_in) 2: 解析错误 (standard_in) 1: 解析错误
标签: bash function parsing while-loop