Вычтите плавающие числа в сценарии оболочки

Я пытаюсь сделать некоторые вычисления в сценарии оболочки с использованием ЦП. Какой возвращаемый номер с плавающей запятой. Но когда я вычитаю это число, я получаю ошибку. См. Следующий код и ошибку.

Код

#!/bin/sh CPU_IDLE=98.67 echo $CPU_IDLE CPU_USAGE=$(( 100 - $CPU_IDLE )) echo $CPU_USAGE 

ошибка

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

Ни bash ни ksh могут выполнять арифметику с плавающей запятой ( ksh93 поддерживает это, если я правильно помню). Я рекомендую переключиться на zsh или запустить внешний инструмент, например, bc :

 $ CPU_IDLE=98.67 $ echo "$CPU_IDLE" $ CPU_USAGE=$( bc <<< "100 - $CPU_IDLE" ) $ echo "$CPU_USAGE" 1.33 

Несмотря на то, что вы использовали тег ksh в своем вопросе, скрипт начинается с hashbang #!/bin/sh , который редко дает вам оболочку korn.

Остальная часть кода отлично работает с ksh (AT & T ksh93) на 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