bash string para int

1

Aqui está o que eu tentei fazer:

#!/bin/sh
res='df | awk 'FNR == 2 { print $5 }''
res2=$((res+0))

Aqui está o meu erro:

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

Eu pesquisei 'string to int bash' que me mostrou $((res+0)) , mas não funciona devido ao % na string ( 53% ). Como posso convertê-lo de tal forma que eu possa fazer uma declaração if como a abaixo (mas isso funciona)?

if [ "$res2" -ge 50 ]
then
    echo "Your disk >=50% full!"
fi
    
por Stéphane Chazelas 24.09.2012 / 00:18

3 respostas

1

Deixe o awk fazer isso:

df -P | awk 'NR == 2 { print $5+0; exit }'
    
por 24.09.2012 / 08:17
2

Diga ao awk para suprimir o % :

#!/bin/sh
res='df | awk 'FNR == 2 { sub("%","",$5); print $5 }''
res2=$((res+0))

Mas não vejo que a linha res2 faça alguma coisa. A menos que você tenha declare -i res2 , o bash ainda vai tratá-lo como uma string. Você pode fazer o seguinte bem:

if [ $res -ge 50 ]; then
    echo "Your disk >= 50% full!"
fi
    
por 24.09.2012 / 00:24
2

Uma pequena manipulação de variáveis também faria:

res='df | awk 'FNR == 2 { print $5 }''
limit=50

if ((  ${res%\%} > limit )); then
    echo "Your disk >= ${limit}% full"
fi

${res%\%} removerá a última ocorrência de% de res , (o primeiro% significa remover a última ocorrência e, em seguida, você precisa escapar \% para dizer que esse é o padrão a ser removido)

    
por 25.09.2012 / 23:30

Tags