BASH 用于检查两个已安装驱动器的脚本 'unary operator expected'

BASH script to check for two mounted drives 'unary operator expected'

尝试编写一个 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

运行 returns 错误:

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

不确定为什么第一个 if 语句有效,但第二个却不起作用,因为它们基本相同。有没有更简洁的方法来检查两个已安装的设备?理想情况下输出一个错误,显示哪些未安装。

你需要在 !=:

后面加上 space
if [ $(mount | grep -c /media/backup) !=1 ]

像这样:

if [ $(mount | grep -c /media/backup) != 1 ]

顺便说一句,如果您有超过 1 个已安装的驱动器匹配 /media/card/media/backup 会怎样? 输出会产生误导, 说 "X is not mounted".

因此,将 != 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 关于 space 需要的注释!=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