表达式“If [commands -gt value]”是否可以接受?

时间:2016-06-02 23:07:18

标签: bash shell if-statement scripting

我想制作一个循环命令,如果它以低使用率运行,将禁用我的CPU。首先,我试着做一个像这样的简单命令:

A=[ $top -bn1 | grep CPU |head -1 |sed s/"%"/""/g|awk '{print $8}' ]

B="2"

if [ $A -gt $B ]
then
    echo a
else
    echo b
fi

但它说“找不到并意外”

2 个答案:

答案 0 :(得分:0)

此:

A=[ $top -bn1 | grep CPU |head -1 |sed s/"%"/""/g|awk '{print $8}' ]

根本没有任何意义。我猜你打算写:

A="$(top -bn1 | grep CPU | head -1 | sed s/%//g | awk '{print $8}')"

编辑添加:运行上述内容后,您应该检查"$A"是否扩展到您认为的功能。 (特别注意,它必须是一个整数,因为shell算法只支持整数。)

答案 1 :(得分:0)

如果希望A成为您编写的命令的输出,请使用以下语法:

A=$( $top -bn1 | grep CPU |head -1 |sed s/"%"/""/g|awk '{print $8}' )

AB是字符串变量。您可以使用语法A=$(($A))将其转换为整数。但是,我建议您更改if语句以将字符串作为参数。

警告:这仅适用于整数。要比较 float ,您可以使用bc命令。

res=$(echo "10.5>10.4" | bc) # res=1 in this case
res=$(echo "10.5<10.4" | bc) # res=0 in this case

最后,您的脚本是:

A=$( $top -bn1 | grep CPU |head -1 |sed s/"%"/""/g|awk '{print $8}' )
B="2"
res=$( echo "$A>$B" |bc )
if [[ $res -eq 1 ]]
then
    # True
    echo "CPU usage to high, value is $A"
else
    # False
    echo "CPU usage OK, lower than $B"