尝试搜索,但找不到问题的直接答案,因为所有其他代码似乎都在做我正在做的事情。我正在编写一个 shell 脚本练习来计算一个班级的平均分,我已经使用我们的参考脚本完成了这一点,但我收到了有关语法的错误(代码底部的错误)
#!/bin/bash
avg=0
temp_total=0
number_of_args=$#
# First see the sufficient cmd args
if [ $# -lt 2 ] ; then
echo -e "Oops! I need at least 2 command line args to calculate an average\n"
echo -e "Syntax: $0: number1 number2 ... numberN\n"
echo -e "Example:$0 5 4\n\t$0 56 66 34"
exit 1
fi
# now calculate the average of the numbers given on command line as cmd args for i in $*
do
# addition of all the numbers on cmd args
temp_total='expr $temp_total + $i '
done
avg='expr $temp_total / $number_of_args '
echo "The average of all the numbers is $avg"
所以我得到的错误是
./avg.sh: line 16: syntax error near unexpected token `do'
./avg.sh: line 16: `do'
我没发现该地区有什么特别的问题,所以我希望有人能帮助我!谢谢!
编辑:具体来说,我尝试删除注释,以防它们引起问题,但无济于事。我也重新输入了该部分。我也尝试找到处理该部分的不同方法,但大多数平均脚本似乎以非常相似的方式处理它,所以我很茫然!
答案1
错误消息抱怨出现意外情况,do
因为您使用错误:do
是用于、和循环的保留字for
。case
由于while
前面until
的注释以以下内容结尾,for i in $*
我猜您只是忘了在那里添加换行符:
# now calculate the average of the numbers given on command line as cmd args
for i in $*
do
# addition of all the numbers on cmd args
temp_total='expr $temp_total + $1 '
done
man bash
/SHELL GRAMMAR/复合命令解释了如何构建for
和其他循环。如果你只是想循环遍历每个参数,bash
也支持简短形式,我会将它与bash
算术扩展这里:
# now calculate the average of the numbers given on command line as cmd args
for i
do
# addition of all the numbers on cmd args
temp_total=$((temp_total+i))
done
答案2
您还可以从以下位置的不间断空格中获得此错误开始每一行(当我从使用制表符的 Word 文档中复制代码并将其粘贴到 Mac Notes 中进行编辑时发生了这种情况)。