如何在shell脚本中比较十进制数?

y53ybaqx  于 2023-04-12  发布在  Shell
关注(0)|答案(3)|浏览(101)
#!/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脚本中比较小数点。

r9f1avp5

r9f1avp51#

您不需要在同一行中使用awkgrepawk可以完成所有操作。
不要使用旧的和过时的回抽搐,使用括号。
因此,这将从:

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 ) -eq 1 ]; then
    echo "yes"
else
    echo "no" 
fi

可以写成

[ $(echo "$cpu < $max" | bc -l ) -eq 1 ] && echo "yes" || echo "no"

[[ $(echo "$cpu < $max" | bc -l ) -eq 1 ]] && echo "yes" || echo "no"
pepwfjgg

pepwfjgg2#

您可以使用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表示失败。

dauxcl2d

dauxcl2d3#

下面是如何将其放入Posix shell函数中,然后可以在shell测试中轻松使用(假设bc为错误代码保留返回代码):

ifbc () { test $(echo "$@" | bc -l ) -ne 0; }

下面是该函数的一个示例用法:

ifbc "$max > $s" && echo "true, it's greater" || echo "no, it's less or ="

相关问题