用于检查两个已安装驱动器的BASH脚本';应为一元运算符';

用于检查两个已安装驱动器的BASH脚本';应为一元运算符';,bash,shell,raspberry-pi,raspbian,Bash,Shell,Raspberry Pi,Raspbian,尝试编写一个bash脚本来检查两个已安装的驱动器,然后在两个驱动器都已连接的情况下执行操作。到目前为止,我已经: if [ $(mount | grep -c /media/card) != 1 ] then echo "ERROR: SD card not mounted" sudo sh -c "echo timer > /sys/class/leds/led0/trigger" sudo sh -c "echo 2000 > /sys/class/le

尝试编写一个bash脚本来检查两个已安装的驱动器,然后在两个驱动器都已连接的情况下执行操作。到目前为止,我已经:

if [ $(mount | grep -c /media/card) != 1 ]
 then
    echo "ERROR: SD card not mounted"
    sudo sh -c "echo timer > /sys/class/leds/led0/trigger"
    sudo sh -c "echo 2000 > /sys/class/leds/led0/delay_on"
else
    if [ $(mount | grep -c /media/backup) !=1 ]
    then
            echo "ERROR: Backup not mounted"
            sudo sh -c "echo timer > /sys/class/leds/led0/trigger"
            sudo sh -c "echo 2000 > /sys/class/leds/led0/delay_on"
    else
            echo "All Plugged in"
    fi
fi
运行返回错误:

./backup2.sh: line 12: [: 0: unary operator expected

不确定为什么第一个
if
语句有效,但第二个语句无效,因为它们基本相同。是否有更干净的方法检查两个安装的设备?理想情况下,输出一个错误,显示哪些未装入。

您需要在
后面加一个空格=

像这样:

if [ $(mount | grep -c /media/backup) != 1 ]
顺便说一句,如果您安装了多个与
/media/card
/media/backup
匹配的驱动器,会发生什么情况? 输出结果将具有误导性, 表示“X未安装”

因此,替换
!=1
条件
==0
。 但如果你决定这么做, 然后有一个更好的方法来写条件, 直接使用管道的出口代码

if ! mount | grep /media/card >/dev/null
then
    echo "ERROR: SD card not mounted"
    sudo sh -c "echo timer > /sys/class/leds/led0/trigger"
    sudo sh -c "echo 2000 > /sys/class/leds/led0/delay_on"
elif ! mount | grep /media/backup >/dev/null
then
    echo "ERROR: Backup not mounted"
    sudo sh -c "echo timer > /sys/class/leds/led0/trigger"
    sudo sh -c "echo 2000 > /sys/class/leds/led0/delay_on"
else
    echo "All Plugged in"
fi

这是一个更干净的代码——删除了嵌套的
if
,使用了
elif
,并考虑了
janos
关于
所需空间的备注=1

#!/bin/bash

if [ $(mount | grep -c /media/card) != 1 ]
then
    echo "ERROR: SD card not mounted"
    sudo sh -c "echo timer > /sys/class/leds/led0/trigger"
    sudo sh -c "echo 2000 > /sys/class/leds/led0/delay_on"
elif [ $(mount | grep -c /media/backup) != 1 ]
then
    echo "ERROR: Backup not mounted"
    sudo sh -c "echo timer > /sys/class/leds/led0/trigger"
    sudo sh -c "echo 2000 > /sys/class/leds/led0/delay_on"
else
    echo "All Plugged in"
fi

在Red Hat 6.x下似乎工作得很好

对不起,亚诺斯——你刚刚在elif上击败了我…:-)谢谢,这很有效!它不太可能在同一个地方有多个,因为我正在使用它为我的相机SD卡创建一个便携式备份设备。PS:自动指出缺少的空间
#!/bin/bash

if [ $(mount | grep -c /media/card) != 1 ]
then
    echo "ERROR: SD card not mounted"
    sudo sh -c "echo timer > /sys/class/leds/led0/trigger"
    sudo sh -c "echo 2000 > /sys/class/leds/led0/delay_on"
elif [ $(mount | grep -c /media/backup) != 1 ]
then
    echo "ERROR: Backup not mounted"
    sudo sh -c "echo timer > /sys/class/leds/led0/trigger"
    sudo sh -c "echo 2000 > /sys/class/leds/led0/delay_on"
else
    echo "All Plugged in"
fi