簡體   English   中英

Bash腳本-檢查已安裝的設備

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM