сравнить значение процессора с помощью сценария оболочки - PullRequest
0 голосов
/ 28 марта 2012

Как я могу сопоставить использование ЦП с помощью сценария оболочки, я получаю ошибку как [: =: ожидается унарный оператор в строке if [ $message -ne "" ]

   #!/bin/sh

    expected_cpuusage="95"
    cpu_usage=`top -n 1 -b|grep Cpu|awk '{print $2}'|cut -d"%" -f1""`
    message=""
    if [ $cpu_usage -gt $expected_cpuusage ]    ##{x%?}
    then
       echo "CPU usage exceeded";
       if [ $message -ne "" ]
       then
         message="$message\n\nCPU usage exceeded configured usage limit \nCurrent CPU usage is $cpu_usage\nConfigured CPU usage is $expected_cpuusage";
       else
         message="CPU usage exceeded configured usage limit \nCurrent CPU usage is $cpu_usage\nConfigured CPU usage is $expected_cpuusage";
       fi ;
    fi

Ответы [ 2 ]

2 голосов
/ 28 марта 2012

Используйте больше цитат :

if [ "$message" -ne "" ]

В противном случае пустые строки испортят выражение.

Еще лучше:

if [ -n "$message" ]
0 голосов
/ 28 марта 2012

> - оператор перенаправления.Вы хотите -gt

if [ $cpu_usage -gt $expected_cpuusage ]

Для этого необходимо, чтобы $ cpu_usage выглядел как целое число, и потерпит неудачу и выдаст ошибку, если это не так.(т. е. если он содержит символы, отличные от 0-9. -gt не сравнивает значения с плавающей запятой, поэтому строки, содержащие '.', не будут работать.) Для сравнений с плавающей запятой используйте expr:

if expr $cpu_usage \> $expected_cpuusage > /dev/null; then 

Есть более удобные способы сделать это сравнение с использованием встроенных команд bash, таких как [[, но эти конструкции ограничивают переносимость скрипта.Другая ошибка, которую вы видите, возникает, когда вы используете пустую строку.Попробуйте использовать кавычки:

if [ "$message" -ne "" ]

, но гораздо понятнее:

if [ -n "$message" ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...