O problema
O problema é que CPU_USAGE
termina como uma string vazia. Isso causa um problema aqui:
[ $CPU_USAGE -gt 85 ]
Depois que a variável shell é avaliada, o acima se torna:
[ -gt 85 ]
Isso falha porque o argumento antes do -gt
está ausente agora.
A solução
Para obter um CPU_USAGE
não vazio, precisamos substituir:
CPU_USAGE=$(top -b -n1 | awk '/^Cpu/ {print }' | cut -d. -f1)
com:
CPU_USAGE=$(top -b -n1 | awk '/^%Cpu/ {print }' | cut -d. -f1)
em que %
foi adicionado.
Citação
Como mencionado acima, quando CPU_USAGE
está vazio e sem aspas, recebemos o erro "Operador unário":
$ CPU_USAGE=""; [ $CPU_USAGE -gt 85 ] && echo yes
bash: [: -gt: unary operator expected
É uma boa prática citar variáveis shell em situações como esta. Se citarmos, receberemos uma mensagem de erro diferente:
$ CPU_USAGE=""; [ "$CPU_USAGE" -gt 85 ] && echo yes
bash: [: : integer expression expected
Enquanto ainda recebemos um erro, esta mensagem de erro é pelo menos mais informativa: diz que $CPU_USAGE
não é um número.
Simplificação
O processo cut
não é necessário. Nós podemos substituir:
CPU_USAGE=$(top -b -n1 | awk '/^%Cpu/ {print }' | cut -d. -f1)
com:
CPU_USAGE=$(top -b -n1 | awk -F'[ .]+' '/^%Cpu/ {print }')