Abfragen, ob Platte gemountet ist

O

ohrobot

Grünschnabel
einfache frage (blutiger shell-skript anfänger).

ich möchte vor dem backup prüfen ob die (usb-) backup platte gemounted ist. dazu führe ich per cron rsnapshot nicht direkt an sondern ein skript das dies vorher prüfen soll.

Code:
#!/bin/bash
#Programm cron_rsnapshot.sh
mounted=`mount | grep /dev/sdd1`

if [$mounted]; then
   echo "Backup-Platte gemounted. Backup kann gestartet werden"

else
    echo "Backup-Platte ist nicht gemountet."
fi

exit 0

Ausgabe
Code:
./cron_rsnapshot.sh: line 5: [/dev/sdd1: No such file or directory
WR_ARCHIV ist nicht gemountet

kann mir jemand einen tipp geben was ich falsch mache?
 
$mounted ist in dem Skript nicht der Exitcode, sondern die Ausgabe von "mount | grep /dev/sdd1". Eckige Klammern brauchst du nur für Vergleiche, alles andere geht ohne. (Dann müssten es sowieso zwei sein).
Korrekt lautet das Skript einfach:
Code:
#!/bin/bash
#Programm cron_rsnapshot.sh


if mount | grep /dev/sda1; then
   echo "Backup-Platte gemounted. Backup kann gestartet werden"
else
    echo "Backup-Platte ist nicht gemountet."
fi
 
Naja, ein [ "$mounted" ] würde einfach testen, ob die Variable mounted nonzero length hat (also "gefüllt" ist).

Von daher haben da nur ein paar Leerzeichen gefehlt. (Die bash ist was Leerzeichen angeht sehr unbarmherzig.)
Also statt:
Code:
if [$mounted]; then
einfach:
Code:
if [ "$mounted" ]; then
Die double-quotes sind zu empfehlen, falls es auch mal Leerzeichen in der Ausgabe vom Befehl geben sollte. (Dann wäre das nämlich wieder ein Syntax-Fehler) Ganz genau genommen sollten sie hier zwar "unnötig" sein, aber da sie quasi nie schaden und oft sehr hilfreich sind empfiehlt es sich als "best practice" sie einfach immer zu benutzen, es sei denn, man weiß genau was man tut.

Die Version mit direktem grep-Befehl im if sollte man mit stdout auf /dev/null gerichtet machen, sonst wird die Ausgabe des Befehls kommentarlos auf den (Standard-)Ausgabekanal gespammt:
Code:
if mount | grep /dev/sda1 1>/dev/null; then

Man kommt übrigens auch mit der ersten Version ganz ohne Variable aus:
Code:
if [ "`mount | grep /dev/sda1`" ]; then
bzw:
Code:
if [ "$(mount | grep /dev/sda1)" ]; then
Das wär dann aber wirklich ein wenig um die Ecke... Sieht allerdings ggf syntaktisch ansprechender aus.
 
super, vielen dank! hat mir sehr weitergeholfen.
 
und wie klappt das ganze per UUID? gibts da irgendeine möglichkeit?
.
.
.
EDIT (autom. Beitragszusammenführung) :
.

habe hier ein backupskript gefunden, dass meine frage beantwortet hat: http://www.ahmedsoliman.com/2008/06/14/good-backup-script/

hm... dafür wird der Befehl blkid benötigt, der nur als root verfügbar ist... gibt denn keine Möglichkeit als user? Per Label würde es über ähnliche Art uns Weise mit mount -l gehen... ist aber halt nicht eindeutig.

Edit: Oh hat sich erledigt... /sbin/blkid tuts auch als user.
 
Zuletzt bearbeitet:

Ähnliche Themen

NAS-Drive Mount in Bash-Script über crontab

Verschlüsseltes Backup-Script mit rsync

Queue für copy Script

Shellskript - Fehler in Cron

Shell-Skript nicht doppelt starten

Zurück
Oben