如果我的平均负载超过 10,我需要发出警报。
如果我的 awk 命令返回一个整数,我可以这样做:
declare -i MAX_LOAD=10
declare -i L1=`cat /proc/loadavg | awk {'print $1'}`
if [ $L1 -gt $MAX_LOAD ]
then
echo "Alert"
fi
但它返回 L1 中的浮点值(例如 2.35)。
我如何比较这种情况下的值?
答案1
由于您已经在使用 awk,也许最简单的方法是也在该语言中进行浮点比较:
MAX_LOAD=10.0
if ! </proc/loadavg awk -vmax_load=$MAX_LOAD '{ exit $1 > max_load }'
then
echo Alert
fi
请注意,其中存在一些诡计:!
操作员反转测试。这是必需的,因为 awk 中的布尔表达式和构造接收值的状态代码if
具有相反的含义。用于<
将文件定向/proc/loadavg
到 awk 的标准输入中。调用 awk with-vmax_load=$MAX_LOAD
将 awk 变量设置max_load
为 shell 变量的值
MAX_LOAD
。
在您的特定情况下,由于您的 MAX_LOAD 是一个整数,并且由于您正在从文件中读取第一个浮点数,因此临时解决方案将是:
if [ $(</proc/loadavg cut -f1 -d.) -gt $MAX_LOAD ] ...
调用cut
将提取 中第一个数字的整数部分/proc/loadavg
。然而,如果上述任何假设成为错误,这个想法就会失败。