paulo1205
(usa Ubuntu)
Enviado em 07/05/2018 - 10:42h
Scarpetah escreveu:
Tenho um arquivo que realiza coletas e atraves de filtros me retorna um numero
IP_TOTAL=`cat dados/arquivo.txt | cut -d "," -f 7`
IP_USADO=`cat dados/servico | grep -E "VR Total" | tr -s " " " " | cut -d " " -f 3`
resultado=$(($IP_TOTAL - $IP_USADO))
echo "$resultado"
ao imprimir o resultado ele não me traz nada,
Quando você usa
$(( ... )) não precisa expandir explicitamente as variáveis que são parte da expressão. Você poderia ter dito simplesmente o seguinte.
resultado=$((IP_TOTAL-IP_USADO))
Agora, se a conta não está produzindo um resultado válido, pode ser que os valores usados na subtração não sejam válidos. Você já os verificou?
se eu realizar o filtro
if [[ $IP_TOTAL == [0-9] ]]; then
echo numerico
else
echo nao numerico
fi
ele me retorna não numerico;
O teste que você faz só aceita números compostos por um único dígito (entre 0 e 9). Se você quiser resultados maiores ou iguais a 10 ou resultados negativos, possivelmente teria de mudar o teste.
tem como realizar a conversão destes dados?
Quais dados? Você não deu sinais claros de que seus dados originais são válidos. Fica complicado dizer qual comportamento eles podem ter.
Mas talvez lhe interesse usar o comando
declare para informar que suas variáveis podem receber apenas valores inteiros, de modo que toda atribuição a elas vai se comportar como uma avaliação aritmética. Desse modo, você pode até não ter o valor que você gostaria de ter (especialmente se a extração de dados tiver algum erro), mas o valor da variável garantidamente será numérico.
declare -i var
# A partir de agora, toda vez que você fizer “var=alguma_expressão”, o efeito será equivalente
# a fazer “var=$((alguma_expressão))”.
ou alguma forma de eu realizar a operação?
Qual operação?