检查文件中的数据并仅接受所需数量的参数,以使用bash脚本计算区域

检查文件中的数据并仅接受所需数量的参数,以使用bash脚本计算区域,bash,parameters,Bash,Parameters,第1部分)我的脚本允许命令行选项-r、-c和-t分别用于矩形、圆形和梯形。矩形选项需要两个参数,长度和宽度。“圆”选项需要一个参数,即半径。梯形选项需要三个参数,即高度和每个平行底座。 第2部分)脚本允许选项-f。当此选项与-r、-c或-t结合使用时,每个选项都有一个参数,即输入文件的名称。输入值将从输入文件中一次读取一行,并将区域打印到标准输出。读取值–1时,脚本应终止 我已经完成了第1部分和第2部分,但脚本在读取-1时终止。在第二部分,当我给矩形一个输入文件时,我要做的是检查该文件每行是否有

第1部分)我的脚本允许命令行选项-r、-c和-t分别用于矩形、圆形和梯形。矩形选项需要两个参数,长度和宽度。“圆”选项需要一个参数,即半径。梯形选项需要三个参数,即高度和每个平行底座。 第2部分)脚本允许选项-f。当此选项与-r、-c或-t结合使用时,每个选项都有一个参数,即输入文件的名称。输入值将从输入文件中一次读取一行,并将区域打印到标准输出。读取值–1时,脚本应终止

我已经完成了第1部分和第2部分,但脚本在读取-1时终止。在第二部分,当我给矩形一个输入文件时,我要做的是检查该文件每行是否有2个值。如果没有2个值,则回显“文件具有无效的数据集”。与圆形相同,它不应接受任何在第th个输入文件的每行和梯形3中的值大于或小于1的内容

        filename=$OPTARG;;
        while read -a line
        do
            if (( $choice == 1 ))
                    then
                            Area=`echo "scale=3; ${line[0]}*${line[1]}" | bc`;
                            echo "Area of the rectangle is $Area";

            fi
            if (( $choice == 2 ))
                    then
                            Pi=3.1416
                            Area=`echo "scale=3; ${line[0]*$line[0]}*$Pi" | bc`;
                            echo "Area of the circle is $Area";

            fi
            if (( $choice == 3 ))
                then
                            Area=`echo "scale=3; (${line[0]}+${line[1]})/2*${line[2]}" | bc`;
                            echo "Area of the trapezoid is $Area";

            fi
            done < "$filename"
filename=$OPTARG;;
读一行
做
如果($choice==1))
然后
面积=`echo“标度=3;${line[0]}*${line[1]}”|bc`;
echo“矩形的面积为$Area”;
fi
如果($choice==2))
然后
Pi=3.1416
面积=`echo“刻度=3;${line[0]*$line[0]}*$Pi“| bc`;
echo“圆的面积为$Area”;
fi
如果($choice==3))
然后
面积=`echo“标度=3;(${line[0]}+${line[1]})/2*${line[2]}”|bc`;
echo“梯形的面积为$Area”;
fi
完成<“$filename”

只需grep文件中的-1和echo$?。如果-1存在,则为零;如果-1不存在,则为1

要检查传递的值的数量,请执行以下操作

SEPERATOR=" ";
#Assumed that seperator is space in your case
#remove all ending spaces
sed -i 's/ *$//g' $filename
#take the count of columns seperated by spaces
cat $filename | grep -o " " | wc -l
#this value +1 gives you the total values in the file

希望这个地狱

我不是在问-1我可以自己做。我想要的是,当读取文件以计算指定对象的面积时,每行中的参数不应小于或大于所需值。我需要2个矩形(长度和宽度),1个圆形(半径),3个梯形(基底1,基底2和高度)。假设我有一个包含以下数据的文件bob 2 3 2 4 2 8,然后在其中运行circle命令应该会给我错误,但运行矩形会给我面积。对不起,我误解了你的问题。只需计算文件中按空格分隔的总列数。别忘了去掉结尾的空格。我编辑了我的答案以反映这一变化