尝试编写一个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
Running返回错误:
./backup2.sh: line 12: [: 0: unary operator expected
不确定为什么第一个if
语句有效,但第二个没有,因为它们基本相同。是否有更清洁的方法来检查两个已安装的设备?理想情况下输出一个错误,显示哪个(或多个)没有安装。
答案 0 :(得分:2)
您需要在!=
:
if [ $(mount | grep -c /media/backup) !=1 ]
像这样:
if [ $(mount | grep -c /media/backup) != 1 ]
顺便说一下,如果您有超过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
答案 1 :(得分:0)
这是一个更简洁的代码 - 删除了嵌套的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下运作良好