Erro ao adicionar variáveis

0

O que há de errado com meu roteiro?

Script:

Success: $(grep success * | grep B2B | wc -l)
etc_error: $(grep etc_error * | grep B2B | wc -l)
map_timeout: $(grep map_timeout * | grep B2B | wc -l)

success=$(grep success * | grep B2B | wc -l)
etc=$(grep etc_error * | grep B2B | wc -l)
map=$(grep map_timeout * | grep B2B | wc -l)

sum=$(($success + $etc + $map))
total=$(($success / $sum))
echo $total

Erro:

-bash: + + : syntax error: operand expected (error token is "+ ")

Obrigado!

    
por Cyril 14.11.2018 / 08:31

2 respostas

2

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)
    
por 14.11.2018 / 08:46
0

você tem que verificar suas variáveis antes da adição, porque se uma delas não estiver configurada ou não tiver valor numérico a sintaxe de adição falhará

você pode definir o valor de vars como 0 antes de configurá-lo para evitar isso.

    
por 14.11.2018 / 08:39