Bash 表达方式是;如果[命令-gt值]”;可以接受吗?

Bash 表达方式是;如果[命令-gt值]”;可以接受吗?,bash,shell,if-statement,scripting,Bash,Shell,If Statement,Scripting,我想做一个循环命令,如果CPU在低使用率下运行,它将禁用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 但上面写着“未找到且出乎意料”这是: A=[ $top -bn1 | grep CPU |head -1 |sed s/"%"/""

我想做一个循环命令,如果CPU在低使用率下运行,它将禁用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
但上面写着“未找到且出乎意料”

这是:

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算术只支持整数。)

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

A=$( $top -bn1 | grep CPU |head -1 |sed s/"%"/""/g|awk '{print $8}' )
A
B
是字符串变量。您可以使用语法
A=$($A))
将其转换为整数。但是,我建议您将if语句更改为使用string作为参数

警告:这仅适用于整数。要比较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

/g.sh[9]:92.0:意外“.”无论如何,tnx可能不接受逗号样式,嗯?“逗号样式?”是您的朋友。
A=[foo]
作为命令运行
foo]
,将环境变量
A
设置为
[
的值。当然这不是您真正想要做的。
[
实际上并不是在shell中对语法进行分组。相反,它是
测试的缩写:
[foo]
测试foo
相同(历史上,使用
/usr/bin/[
作为
/usr/bin/test
实现的硬链接)所以,如果你不写
A=test$top-bn1
,你就不能合理地写
A=[$top-bn1]
。我不太明白你所说的硬链接xD,看起来它已经被ruakh纠正了,但是谢谢。无论如何,我的linux可能没有提供“foo”command,只是一个非常古老的modem..
foo
是一个元语法变量——也就是说,它是其他命令的替代品;当我说“foo”,这可能是
top
grep
或任何其他东西。请看,如果不是整数假设,这是有效的;这里的实际值是浮点值。反勾号已经被弃用了20多年。请改用
$()
。谢谢你的建议。我不知道,我在帖子中更改了它。
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"