2015-04-08 2 views
1

В моей раковине-скрипт для сбора загрузки процессора:Относительное выражение сравнения

cpu=$(mpstat | awk '$12 ~ /[0-9.]+/ { print 100 - $12}'); 
echo "CPU Usage (%): $cpu" 

Выход:CPU Usage (%): 0.44%

Этот фрагмент следует выше два заявления в мой сценарий:

if [ ($cpu >= 50|bc) -ne 0 ]; then 
    /usr/sbin/sendmail "$recipients" <<EOF 
    subject: $subject 
    from: $from 
    `date`: CPU Utilisation above 50% on $IP 
EOF 
echo "Mail alert triggered." 
fi 

Кажется, что проблема связана с синтаксисом в инструкции, где> = сравнение выполняется.

Ошибка:

./trialByCombat.sh: line 148: syntax error near unexpected token `$cpu' 
./trialByCombat.sh: line 148: `if [ ($cpu >= 50|bc) -ne 0 ]; then' 

Я понятия не имею, по этому вопросу. Пробелы, отступы, shell-скрипт бьют меня.

+0

Глядя на этом я должен быть. '$ cpu> = 50' не имеет смысла, поскольку он не находится в тестовой конструкции. –

ответ

1

Поскольку вы используете BASH вы можете использовать ((...)) для арифметических операций и избежать вызова bc:

if ((cpu >= 50)); then 
    /usr/sbin/sendmail "$recipients" <<EOF 
    subject: $subject 
    from: $from 
    `date`: CPU Utilisation above 50% on $IP 
EOF 
echo "Mail alert triggered." 
fi 
0

Измените сценарий:

if [ $(bc <<< "$cpu <= 50") -eq 1 ] 
then 
    /usr/sbin/sendmail "$recipients" <<EOF 
    subject: $subject 
    from: $from 
    `date`: CPU Utilisation above 50% on $IP 
EOF 
echo "Mail alert triggered." 
fi 

Другой образец:

AMD$ cat Script.sh 
#!/bin/bash 

cpu=49.9 
if [ $(bc <<< "$cpu <= 50") -eq 1 ] 
then 
    echo "1" 
fi 

cpu=50.0 
if [ $(bc <<< "$cpu <= 50") -eq 1 ] 
then 
    echo "2" 
fi 

cpu=50.1 
if [ $(bc <<< "$cpu <= 50") -eq 1 ] 
then 
    echo "3" 
fi 


AMD$ ./Script.sh 
1 
2 
Смежные вопросы