Isso não explica tudo - dadas suas declarações de variáveis, elas devem ter um valor - mas já que você está usando , você não precisa de $
para introduzir variáveis; variáveis indefinidas, em seguida, padrão para 0:
sum=$((success + etc + map))
total=$((success / sum))
echo "$total"
Idealmente, você deve verificar se sum
é diferente de zero antes de dividir, mas pelo menos você receberá uma mensagem de erro sensata com essa abordagem, mesmo que não verifique sum
(“divisão por 0”) “Erro de sintaxe: operando esperado”, no bash).
O erro que você está recebendo vem de
sum=$(($success + $etc + $map))
Por algum motivo, success
, etc
e map
estão todos indefinidos ou vazios. O shell expande o acima para
sum=$(( + + ))
e, em seguida, tenta expandir isso, o que resulta no erro de sintaxe que você cita.
Isso é bastante surpreendente, já que
success=$(grep success * | grep B2B | wc -l)
deve produzir um valor ...
BTW, você pode querer melhorar o acima para:
success=$(grep success ./* | grep -c B2B)
ou, se B2B
tiver que ser correspondido no conteúdo das linhas sucesso e não nos nomes dos arquivos:
success=$(cat ./* | grep success | grep -c B2B)
ou com o GNU grep
ou compatível:
success=$(grep -h success ./* | grep -c B2B)