A partir do link que você forneceu, vejo a linha abaixo.
result=$(echo "$used / $total * 100" |bc -l|cut -c -2)
Conforme o comentário de @ Graeme, altere a linha acima para abaixo.
result=$(echo "$used / $total * 100" |bc -l)
Agora, depois de adicionar a linha acima, temos que alterar a saída do result
para o inteiro, conforme abaixo.
result1=${result/.*}
Eu acho que em uma das máquinas onde o erro ocorre, esta saída não é um inteiro. Basta converter a saída do resultado em número inteiro para que você possa lidar com esses casos. Adicione a linha abaixo depois de calcular o result
.
result1=${result/.*}
E, em vez de result
, altere os nomes das variáveis como result1
dentro dos if
loops e o erro não ocorrerá.
Eu suspeito que os atributos cut -c -2
para o erro, na maioria das vezes, estejam apenas cortando os dois primeiros caracteres. E se o resultado tiver apenas um caractere? Suponha que se o resultado for 1.23456
, o corte acima resultará em 1.
como o valor para result
, que obviamente é a causa do erro integer expected
.
O motivo pelo qual está funcionando bem nos servidores restantes é porque não encontrou um caso em que a variável result
tenha apenas um único dígito. É altamente provável que falhe nos servidores restantes também se o resultado for uma variável de dígito único (algo como eu mencionei no exemplo acima).