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).