[英]Bash Script - Check mounted devices
我想做的是-最后,我需要一个脚本来检查3种设备,即SD卡,Backup1和Backup2。 它们都已设置为在各自的挂载点自动挂载。 该脚本应首先检查SD卡,如果失败,则应发送警告,仅此而已。 如果SD正常,但仅安装了一个备份,则要求确认以进行rsync到已安装的备份。 如果所有设备都已安装,则从SD卡rsync到两个备份。
目前,我只是想使用echo命令使设备检查固定。 这是我所拥有的(经过多次尝试)-
if ! mount | grep /media/card >/dev/null
then
echo "ERROR: SD card not mounted, aborting"
else
if ! mount | grep /media/backup >/dev/null
then
if ! mount | grep /media/backup2 >/dev/null
then
echo "ERROR: No backup devices"
else
echo "CAUTION: Backup_2 missing, Backup_1 OKAY"
fi
else
if ! mount | grep /media/backup2 /dev/null
then
echo "CAUTION: Backup_1 missing, Backup_2 OKAY"
else
echo "SUCCESS: All devices OKAY"
fi
fi
fi
哪个不起作用。 我对所有嵌套的“ if”感到困惑,当然还有更简单的方法吗? 也许可以独立检查每个设备,然后返回等于各种组合的值(0 =无设备,仅1 = SD,2 = SD&Backup1,3 = SD&Backup 2,4 =一切正常),然后读取该值并决定要运行的脚本的下一部分? 如果没有,这种方法哪里出错了?
任何帮助表示赞赏
解决了! 问题的一部分是使用mount | grep /media/backup > /dev/null
mount | grep /media/backup > /dev/null
因为存在名称相似的问题,因此/ media / backup2被挂载意味着它将两个设备都视为已挂载。
使用grep -q /media/backup2\\ /proc/mounts
工作方式相似,或者至少产生相同的结果,只是没有命名问题。
我还更改了if语句的工作方式,现在它检查SD卡,如果失败,则中止。 然后,它以相当简单的流程检查安装了哪些设备。
这是代码:
GNU nano 2.2.6文件:backupSD2.sh已修改
#!/bin/bash
#Check for SD
if ! grep -q /media/card\ /proc/mounts
then
echo "ERROR: NO SD CARD"
exit 0
else
echo "SD OKAY..."
fi
#Check for Backup Devices
if (( grep -q /media/backup\ /proc/mounts ) && ( grep -q /media/backup2\ /proc/mounts ))
then
echo "Both Backups mounted"
elif grep -q /media/backup\ /proc/mounts
then
echo "CAUTION: Backup_2 missing, Backup_1 OKAY"
elif grep -q /media/backup2\ /proc/mounts
then
echo "CAUTION: Backup_1 missing, Backup_2 OKAY"
else
echo "ERROR: NO BACKUP DEVICES"
exit 0
fi
在'echo'命令之后,我将放置rsync命令。 最后的exit 0
可能是不必要的,但我认为它不会造成任何危害,并确保不会再尝试其他命令。
使用mountpoint
,如果路径是已安装的设备,则返回成功( 0
),否则返回1
:
#!/bin/bash
check_mountpoint(){
if mountpoint -q $1
then
printf "%s\n" "$1 is mounted"
return 0
else
printf "%s\n" "$1 is not mounted"
return 1
fi
}
check_mountpoint /media/sd
if [ $? -gt 0 ]
then
printf "%s\n" "aborting"
exit 0
fi
check_mountpoint /media/backup1
check_mountpoint /media/backup2
这是您的代码已更正,希望对您有所帮助。
if mountpoint -q /media/sd
then
if mountpoint -q /media/backup
then
if mountpoint -q /media/backup2
then
echo "SUCCESS: All devices OKAY"
# run your command here
else
echo "CAUTION: Backup_2 missing, Backup_1 OKAY, SD OKAY"
# run your command here
fi
else
if mountpoint -q /media/backup2
then
echo "CAUTION: Backup_1 missing, Backup_2 OKAY, SD OKAY"
# run your command here
else
echo "SD OKAY , BACKUP Devices missing"
fi
fi
else
echo "SD is missing , Exit"
fi
就像是:
die() {
echo "$0[$$] ERROR: $@" >&2
exit 1
}
grep -q /media/card\ /proc/mounts || die "/media/card not mounted"
grep -q /media/backup2?\ /proc/mounts || die "No backup devices"
grep -q /media/backup\ /proc/mounts || echo "CAUTION: Backup_1 missing, Backup_2 OKAY"
grep -q /media/backup\ /proc/mounts &&
grep -q /media/backup2\ /proc/mounts &&
echo "SUCCESS: All devices OKAY"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.