2014-09-01 4 views
1

Я пытаюсь создать простой скрипт, который проверяет, является ли использование ЦП на определенном уровне. У меня есть малина Pi для этого проекта.Ожидаемое целочисленное выражение (Bash)

Единственная проблема у меня в настоящее время является то, что у меня есть переменная CPU которая является использование процессора, при выполнении сценария, я получаю ошибку

line 25: [: 4.8: integer expression expected 

Я не уверен, почему Баш возвращает это значение, если BASH действительно не волнует int, String и т. д., как JAVA. Найдено, что вне here.

Кроме того, у меня есть, если заявление: if $CPU -gt 1 только для тестирования (это должно вернуть истинное прямо сейчас)

red='\e[0;31m' 
yellow='\e[1;33m' 
NC='\e[0m' # No Color 
echo -e "${NC}Starting Server!${NC}" 
echo -e "${red}Errors in red!${NC}" 
echo -e "${yellow}Info in yellow!${NC}" 
sleep 1 
echo -e "\n\n" 
##CPU USAGE STUFF 
echo -e "${yellow}Current CPU Usage:" 
CPU=$(top -bn1 | grep "Cpu(s)" | \ 
      sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | \ 
      awk '{print 100 - $1""}') 
echo $CPU % 
echo -e "${NC}**********${NC}" 
cd /root/mc_server/ 
sleep 1 


##CPU USAGE LOOP CHECKER 
while : 
do 
     sleep 5 
     echo $CPU 
     if [ $CPU -gt 1 ] 
     then 
     echo -e "${red}ALERT! CPU Usage is TOO HIGH!${red}" 
     fi 

done 
## 


##java -Xmx400M -jar bukkit.jar -o true 
+0

integer означает целое число. Если вы передадите bash значение, равное 4.8, тогда возникает вопрос, нужно ли искать значение экспоненты, т.е. 4.800889e27, и это будет много работы ;-). Просто округлите свое значение 4.8 или обрезайте его, а затем вы получите целочисленное значение, которое будет работать. 'case $ CPU в * \. *) CPU = $ {CPU %%. *} ;; esac' может помочь. Удачи. – shellter

+0

@shellter спасибо, я пойду и попробую –

+0

@ Olivr3000, как говорится в приюте, просто возьмите целое число из '$ CPU'. Самый эффективный способ - удалить все вплоть до десятичного начала справа и с помощью подстроки. 'CPU = $ {CPU%. *}' '%%' работает, единственное отличие заключается в том, что он говорит, что все вхождения '.' начинаются справа, по сравнению с'% ', который является« первым вхождением ». –

ответ

4

Вопрос заключается в том, что 4,8 является дробным числом.

Вы можете использовать бв, чтобы иметь дело с нецелых значений следующим образом:

if [[ $(echo "$CPU > 1" | bc -l) -eq 1 ]]; 

он будет возвращать логические выражения как 1 для истинно или 0 для ложной.

+1

Спасибо, код работает красиво. –

+0

Не проблема :) – ShaneQful