0
#!/bin/bash

# Obtain the server load
loadavg=`uptime |cut -d , -f 4|cut -d : -f 2`
thisloadavg=`echo $loadavg|awk -F \. '{print $1}'`

if [ "$thisloadavg" -eq "0.01" ]; then

ulimit  -n 65536
service nginx restart
service php-fpm restart

fi

错误是:

./loadcheck.sh: line 7: [: 0.01: integer expression expected

我想做一个可以比较双精度而不是整数的负载检查 shell 脚本,因为我想确保负载返回小于 0.01 即 0.00 ,

如果我使用 0,即使负载为 0.05 ,它仍然会执行代码。

4

2 回答 2

1

在 zsh 你可以简单地使用:

if [[ "$thisloadavg" < "0.01" ]]; then

double [[ 结构允许额外的测试,在 zsh 中它允许浮点测试。

于 2012-12-19T17:47:07.337 回答
0

Bash 无法处理浮点值,因此您需要使用额外的命令,例如awk,exprbc为您完成。例如,使用bc

loadavg=$(uptime | cut -d, -f4 |cut -d: -f2)
low_load=$(echo "$loadavg < 0.01" | bc -l)
if [ $low_load -eq 1 ]; then
  # do stuff
fi
于 2012-12-19T17:51:32.907 回答