it-swarm.com.de

So überprüfen Sie, ob ein Dateisystem mit einem Skript bereitgestellt wird

Ich bin neu im Scripting ... Ich kann sehr grundlegende Dinge tun, aber jetzt brauche ich eine Hand.

Ich habe ein lokales Dateisystem, das nur bereitgestellt wird, wenn ich eine Sicherung durchführen muss.

Ich fange damit an.

#!/bin/bash
export MOUNT=/myfilesystem

if grep -qs $MOUNT /proc/mounts; then
  echo "It's mounted."
else
  echo "It's not mounted."; then
  mount $MOUNT;
fi

Wie gesagt, ich bin sehr einfach im Scripting. Ich habe gehört, dass Sie den Status des Befehls mount überprüfen können, indem Sie sich die Rückkehrcodes ansehen.

RETURN CODES
       mount has the following return codes (the bits can be ORed):
       0      success
       1      incorrect invocation or permissions
       2      system error (out of memory, cannot fork, no more loop devices)
       4      internal mount bug
       8      user interrupt
       16     problems writing or locking /etc/mtab
       32     mount failure
       64     some mount succeeded

Ich weiß nicht, wie ich das überprüfen soll. Irgendeine Anleitung?

20
maniat1k

Sie können den Statuscode von mount und die am besten geschriebenen ausführbaren Dateien mit dem Shell-Spezialparameter ? Überprüfen.

Von man bash:

? Expands to the exit status of the most recently executed foreground pipeline.

Nachdem Sie den Befehl mount ausgeführt haben, wird bei sofortiger Ausführung von echo $? Der Statuscode des vorherigen Befehls gedruckt.

# mount /dev/dvd1 /mnt
  mount: no medium found on /dev/sr0
# echo $?
  32

Nicht alle ausführbaren Dateien haben genau definierte Statuscodes. Zumindest sollte es mit einem Erfolgscode (0) oder einem Fehlercode (1) beendet werden, aber das ist nicht immer der Fall.

Um Ihr Beispielskript zu erweitern (und zu korrigieren), habe ich der Übersichtlichkeit halber ein verschachteltes if - Konstrukt hinzugefügt. Es ist nicht die einzige Möglichkeit, den Statuscode zu testen und eine Aktion auszuführen, aber es ist am einfachsten zu lesen, wenn Sie lernen.

#!/bin/bash
mount="/myfilesystem"

if grep -qs "$mount" /proc/mounts; then
  echo "It's mounted."
else
  echo "It's not mounted."
  mount "$mount"
  if [ $? -eq 0 ]; then
   echo "Mount success!"
  else
   echo "Something went wrong with the mount..."
  fi
fi

Weitere Informationen zu "Exit und Exit Status" finden Sie im Advanced Bash-Scripting Guide .

20
George M

Viele Linux-Distributionen haben den Befehl mountpoint. Es kann explizit verwendet werden, um zu überprüfen, ob ein Verzeichnis ein Mountpoint ist. So einfach ist das:

#!/bin/bash    
if mountpoint -q "$1"; then
    echo "$1 is a mountpoint"
else
    echo "$1 is not a mountpoint"
fi
38
grosshat

Noch eine Möglichkeit :

if findmnt ${mount_point}) >/dev/null 2>&1 ; then
  #Do something for positive result (exit 0)
else
  #Do something for negative result (exit 1)
fi
3
Sun

Kurz Aussagen

Überprüfen Sie , ob gemountet :

mount|grep -q "/mnt/data" && echo "/mnt/data is mounted; I can follow my job!"

Überprüfen Sie , wenn nicht gemountet :

mount|grep -q "/mnt/data" || echo "/mnt/data is not mounted I could probably mount it!"
2

Der einfachste Weg, für den kein Root erforderlich ist, ist:

if $(df | grep -q /mnt/ramdisk); then

fi

oder um zu sehen, ob es nicht montiert ist:

if ! $(df | grep -q /mnt/ramdisk); then

fi
2

Ich habe es mit dem folgenden Skript versucht

#!/bin/bash
echo "enter the file system to check whether its mounted or not"
read p
echo $p
for i in `cat /proc/mounts`
do
if [[ $p =~ $i ]]
then
echo "$p is mounted"
else
echo "$p is not mounted"
fi
done

Sie müssen nur den Namen des Dateisystems eingeben

0