에이바*_*에이바 4 bash shell logic syntax-error
谁能告诉我这里我做错了什么?
#!/bin/sh
if [ $# = 0 ]
then
echo "Usage: $0 <filename>"
exit 1
fi
sum=0
count=0
while [ $0 != 0 ]
do
sum="$sum"+"$2"
count="$count"+ 1
done
if [ "$count" != 0 ]
then
avg="$sum"/"$count"
printf "Sum= $sum \n Count= $count \n Avg= $avg"
exit 0
else
printf "Sum= $sum \n Count= $count \n Avg= undefined"
exit 0
fi
exit 1
Run Code Online (Sandbox Code Playgroud)
这是我尝试测试代码时的输出:
./average
sum: =: No such file or directory
sum: 0: No such file or directory
./average: 11: count: not found
[: 18: !=0: unexpected operator
./average: 25: Syntax error: Unterminated quoted string
Run Code Online (Sandbox Code Playgroud)
基本上,如果我有一个看起来像这样的文件:
FirstPerson 23
SecondPerson 36
ThirdPerson 22
Run Code Online (Sandbox Code Playgroud)
我希望能够将其读入我的程序并输出:
Sum = FirstPerson+SecondPerson+ThirdPerson
Count = NumberofPeople
Average = Sum/Count
Run Code Online (Sandbox Code Playgroud)
Sie*_*geX 16
awk '{sum+=$2}END{printf "Sum=%d\nCount=%d\nAve=%.2f\n",sum,NR,sum/NR}' ave.txt
Run Code Online (Sandbox Code Playgroud)
首先,Bash不能进行整数除法,你需要将数学管道传递给像'bc'这样的工具,或者只是使用awk来完成所有这一切,因为它非常强大; 毕竟,你的整个剧本都变成了一个单行.
$ cat ave.txt FirstPerson 23 SecondPerson 36 ThirdPerson 22
Sum=81 Count=3 Ave=27.00
我不知道你的shell脚本,但我知道你应该使用正确的工具来完成工作.该工具是AWK.它专为此任务而设计,如果您使用的是UNIX(或Linux,或Mac OS X或其他),则可以安装它.这是单线:
awk '{ sum+=$2; count+=1 } END {print "Sum =",sum; print "Count =",count; print "Average= ",sum/count}' test2.dat
Run Code Online (Sandbox Code Playgroud)
阅读AWK指南.UNIX的理念是不要重新使用轮子.使用合适的工具,好友.
祝好运,