Реляционные операторы для значений с плавающей точкой в ​​Unix Shell Scripting - PullRequest
2 голосов
/ 15 февраля 2012

Я пишу сценарий оболочки, чтобы выяснить, требует ли какой-либо процесс слишком большой загрузки ЦП, затем сценарий отправит письмо в службу поддержки.

У меня пороговое ограничение равно 25, ипринимает использование ЦП как:

cpuUsage=`ps -eo pcpu,pid,args | sort -k 1 -nr  | head -1`

Итерации по нему, чтобы выяснить cpuUsage

for count in $cpuUsage
do
      CPUusageCount=$count
done

Затем проверка CPUUsageCount с пороговым пределом, как здесь:

if [ $CPUusageCount -gt $THRESHOLD_LIMIT ];
then 
 #Sending mail to Support group
fi

Здесь я сталкиваюсь с сообщением об ошибке: Integer expression expected at if [ $CPUusageCount.Разве мы не можем использовать -gt для проверки чисел с плавающей запятой?Пожалуйста, помогите мне, как этого добиться?

Ответы [ 4 ]

4 голосов
/ 15 февраля 2012

Вы можете решить отрубить дробную часть числа, а затем использовать -ge для сравнения:

if [ "${CPUusageCount%.*}" -ge $THRESHOLD_LIMIT ]
then
    # Send email
fi
1 голос
/ 15 февраля 2012

Арифметика с плавающей точкой поддерживается ksh

#!/bin/ksh -x

CPUusageCount=99.99
THRESHOLD_LIMIT=55.55

if [ $CPUusageCount -gt $THRESHOLD_LIMIT ]; then
  echo Sending mail to Support group
fi

дает

+ CPUusageCount=99.99
+ THRESHOLD_LIMIT=55.55
+ [ 99.99 -gt 55.55 ]
+ echo Sending mail to Support group
Sending mail to Support group
1 голос
/ 15 февраля 2012

Вы можете использовать команду bc:

if [ $(echo "$CPUusageCount >= $THRESHOLD_LIMIT"|bc) -eq 1 ];
1 голос
/ 15 февраля 2012

Вы можете использовать command-substitution для сравнения двух чисел с плавающей точкой.

пример:

CPUusageCount=99.99
THRESHOLD_LIMIT=55.55

if [ `python -c "print $CPUusageCount>$THRESHOLD_LIMIT"` == 'True' ]; then
    echo Sending mail to Support group
fi
...