Subtrair números flutuantes no shell script

3

Estou tentando fazer alguns cálculos no shell script com o uso da CPU. Que retorna o número do ponto flutuante. Mas quando subtraio esse número, estou recebendo um erro. Veja o seguinte código e erro.

Código

#!/bin/sh

CPU_IDLE=98.67
echo $CPU_IDLE
CPU_USAGE=$(( 100 - $CPU_IDLE ))
echo $CPU_USAGE

Erro

./poc.sh: line 14: 100 - 98.67 : syntax error: invalid arithmetic operator (error token is ".67 ")
    
por sugunan 19.08.2015 / 16:52

2 respostas

7

Nem bash nem ksh pode executar aritmética de ponto flutuante ( ksh93 suporta isso se bem me lembro). Eu recomendo mudar para zsh ou executar uma ferramenta externa como bc :

$ CPU_IDLE=98.67
$ echo "$CPU_IDLE"
$ CPU_USAGE=$( bc <<< "100 - $CPU_IDLE" )
$ echo "$CPU_USAGE"
1.33
    
por 19.08.2015 / 16:58
0

Embora você tenha usado a tag em sua pergunta, o script começa com o #!/bin/sh hashbang, que raramente lhe dará um shell korn.

O resto do código funciona bem com ksh (AT & T ksh93) no Ubuntu 14.04:

$ ksh poc.sh
98.67
1.33

$ ls -lL /bin/ksh*
-rwxr-xr-x 1 root root 1509040 Jan  9  2013 /bin/ksh
-rwxr-xr-x 1 root root 1509040 Jan  9  2013 /bin/ksh93
    
por 20.08.2015 / 13:02