вы должны проверить свои переменные перед добавлением, потому что, если одна из них не установлена или не имеет числового значения синтаксис добавления завершится ошибкой
Вы можете по умолчанию установить vars равным 0 перед настройкой, чтобы избежать этого.
Это не объясняет всего — учитывая ваши объявления переменных, они должны иметь значение — но поскольку вы используете арифметическое расширение , вам не нужно $
для введения переменных; неопределенные переменные, то по умолчанию 0:
sum=$((success + etc + map))
total=$((success / sum))
echo "$total"
В идеале вы должны проверить, что sum
не равно -нулю перед делением, но, по крайней мере, вы получите осмысленное сообщение об ошибке при таком подходе, даже если вы не проверяетеsum
(«деление на 0», а чем «ожидаемая синтаксическая ошибка :операнд», в bash ).
Ошибка, которую вы получаете, исходит от
sum=$(($success + $etc + $map))
По какой-то причине success
, etc
и map
не определены или пусты. Оболочка расширяет вышеуказанное до
sum=$(( + + ))
, а затем пытается расширить это, что приводит к синтаксической ошибке, которую вы цитируете.
Это довольно удивительно, поскольку
success=$(grep success * | grep B2B | wc -l)
должно получить значение...
Кстати, вы можете улучшить вышеизложенное до:
success=$(grep success./* | grep -c B2B)
или, если B2B
должно сопоставляться по содержимому строк успеха , а не по именам файлов:
success=$(cat./* | grep success | grep -c B2B)
или с GNU grep
или совместимый:
success=$(grep -h success./* | grep -c B2B)