Я пытаюсь создать простой скрипт, который проверяет, является ли использование ЦП на определенном уровне. У меня есть малина 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
integer означает целое число. Если вы передадите bash значение, равное 4.8, тогда возникает вопрос, нужно ли искать значение экспоненты, т.е. 4.800889e27, и это будет много работы ;-). Просто округлите свое значение 4.8 или обрезайте его, а затем вы получите целочисленное значение, которое будет работать. 'case $ CPU в * \. *) CPU = $ {CPU %%. *} ;; esac' может помочь. Удачи. – shellter
@shellter спасибо, я пойду и попробую –
@ Olivr3000, как говорится в приюте, просто возьмите целое число из '$ CPU'. Самый эффективный способ - удалить все вплоть до десятичного начала справа и с помощью подстроки. 'CPU = $ {CPU%. *}' '%%' работает, единственное отличие заключается в том, что он говорит, что все вхождения '.' начинаются справа, по сравнению с'% ', который является« первым вхождением ». –