1

我知道以下命令在以下条件下返回 0(真)或 1(假):

hdparm -C /dev/sda |grep "active/idle"

如果磁盘处于活动状态,则为 true,否则为 false。我想以编程方式使用此结果来显示另一个文本或将其用于监视。我已经尝试过了,但它不起作用(语法错误):

if [ hdparm -C /dev/sda |grep "active/idle" ]; then
    echo sda1 is ON
else
    echo sda1 is OFF
fi

它是如何正常工作的?

此外,是否有关于 Bash 条件表达式的清晰易懂的权威指南,可以解释每种可能情况下的所有不同类型的表达式语句?

4

2 回答 2

3

I usually just simply use

if hdparm -C /dev/sda | grep -q 'active/idle' ; then
    echo sda1 is ON
else
    echo sda1 id OFF
fi
于 2013-05-09T10:39:17.237 回答
1

将条件语句包装在子外壳中:

if [ -z "$(hdparm -C /dev/sda |grep "active/idle")" ]; then

-z在这里测试空字符串。可能您还必须替换active/idleactive.

编辑:正如@a​​basu 建议的那样,在这种情况下,最好测试 grep 的返回码,如果表达式匹配,则返回码为 0:

hdparm -C /dev/sda | grep -q "active/idle"
status=$?
if [ $status -eq 0]; then

您将在测试手册页上找到有关条件语句的所有详细信息。但是,您的 shell 可能会进一步扩展语法,就像 bash 一样。

于 2013-05-09T10:03:50.140 回答