bash:意外标记‘do’附近有语法错误

bash:意外标记‘do’附近有语法错误

尝试搜索,但找不到问题的直接答案,因为所有其他代码似乎都在做我正在做的事情。我正在编写一个 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是用于、和循环的保留字forcase由于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 中进行编辑时发生了这种情况)。

相关内容