удар: синтаксическая ошибка около неожиданного маркера 'делает'

Испытанный поиск вокруг и не мог найти прямое решение моей проблемы, поскольку все другие коды там, кажется, делают то, что я делаю. Я работаю над осуществлением сценариев оболочки для вычисления средних чисел для класса, и я добрался до этой точки с помощью наших ссылочных сценариев, однако я получаю ошибки о синтаксисе (ошибка в конце кода)

#!/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'

Я ничего не могу найти особенно неправильно вокруг той области, таким образом, я надеялся, что кто-то мог выручить меня!Спасибо!

править: В частности, я попытался удалить комментарии на всякий случай, что они вызывали проблемы, напрасно. Я перепечатал раздел также. Я также пытался найти различные способы обработать ту часть, но большинство сценариев усреднения, кажется, обрабатывает ее очень похожим способом, таким образом, я в замешательстве!

2
задан 4 April 2018 в 09:15

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 объясняет, как создать 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
7
ответ дан 2 December 2019 в 01:36

Другие вопросы по тегам:

Похожие вопросы: