Bash:if(command)|(command)

时间:2013-05-09 09:58:55

标签: bash syntax conditional-statements

我知道以下命令在以下条件中返回0(true)或1(false):

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条件表达式的明确可理解的权威指南可以解释每种可能情况的所有不同类型的表达式语句?

2 个答案:

答案 0 :(得分:3)

我通常只是使用

if hdparm -C /dev/sda | grep -q 'active/idle' ; then
    echo sda1 is ON
else
    echo sda1 id OFF
fi

答案 1 :(得分:1)

将条件语句包装在子shell中:

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

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

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

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

您将在test man page上找到有关条件语句的所有详细信息。但是,你的shell可能会进一步扩展语法,就像bash那样。