#!/bin/bash
for input in $(cat status_cpu.txt)
do
cpu=`ssh -i root@$input 'top -b -n1' | grep "load" | awk '{print $12}'`
max=2.02
if [ $(echo "$cpu < $max" | bc -l ) ]; then
echo "yes"
else
echo "no"
fi
done
cat status_cpu.txt
10.0.0.1
10.0.0.2
我想比较shell脚本中的小数点。
答案 0 :(得分:1)
您可以使用bc -l
进行比较,如下所示:
max='2.02'
s='2.01'
bc -l <<< "$max > $s"
1
s='2.05'
bc -l <<< "$max > $s"
0
所以bc -l
表达式将打印1表示成功,0表示失败。
答案 1 :(得分:1)
您不需要在同一行使用awk
和grep
,awk
可以完成所有操作。
不要使用旧的和过时的背景,请使用括号。
所以这会改变:
cpu=`ssh -i root@$input 'top -b -n1' | grep "load" | awk '{print $12}'`
要:
cpu=$(ssh -i root@$input 'top -b -n1' | awk '/load/ {print $12}')
而且:
if [ $(echo "$cpu < $max" | bc -l ) ]; then
echo "yes"
else
echo "no"
fi
可以写
[ $(echo "$cpu < $max" | bc -l ) ] && echo "yes" || echo "no"
或
[[ $(echo "$cpu < $max" | bc -l ) ]] && echo "yes" || echo "no"
答案 2 :(得分:0)
以下是如何将它放入Posix shell函数中,以后可以很容易地在shell测试中使用(可能是bc保留错误代码的返回码):
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<span dir="rtl">Coffee</span>
<span dir="ltr">Milk</span>
<span dir="rtl">Soda</span>
此函数的一个示例用法:
ifbc () { test $(echo "$@" | bc -l ) -ne 0; }