Como posso subtrair duas variáveis no bash?

0

Estou recebendo um erro em um script:

#!/bin/bash
value='55'
size='df -kh | grep '/vol/cdr/MCA' | awk '{print $5}'| sed 's/%//g''
if [ "$size" -gt "$value" ] ;
then
delete=[ "$size" - "$value" ]
echo $delete
fi

Saída:

[root@rohit ~]# sh -x test.sh
+ value=55
++ df -kh
++ grep /vol/cdr/MCA
++ awk '{print $5}'
++ sed s/%//g
+ size=78
+ '[' 78 -gt 55 ']'
+ delete='['
+ 78 - 55 ']'
test.sh: line 6: 78: command not found
+ echo
    
por rohit 15.05.2016 / 18:09

3 respostas

3

A sintaxe [ ... ] é na verdade um comando , e não é nada especial para o shell. É outro nome para o comando test - consulte man test ou apenas man [ .

O que você quer é avaliação aritmética :

delete="$((size-value))"

O que está acontecendo em seu código é que, como você não citou o valor que está atribuindo à variável, toda a linha foi dividida em palavras pelo shell:

delete=[
"$size"
-
"$value"
]

O primeiro deles é tratado como uma atribuição de variável, atribuindo a string "[" à variável delete ; o resto é então considerado como um comando.

Como 78 (a expansão de "$size" ) não é um comando válido, o shell lança um erro.

    
por 15.05.2016 / 18:22
1
value=55
size=42
declare -i result    # set integer attribute
result=$value-$size
echo $result

Saída:

13
    
por 15.05.2016 / 18:54
0

Você está tentando fazer matemática, certo? Nesse caso, substitua:

delete=[ "$size" - "$value" ]

com

delete=$(($size-$value))
    
por 15.05.2016 / 18:22