Bash

如何檢查文件系統是否使用腳本掛載

  • April 16, 2020

我是腳本新手……我可以做非常基本的事情,但現在我需要幫助。

我有一個本地文件系統,只有在需要備份時才會掛載。

我從這個開始。

#!/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

正如我所說,我在腳本編寫方面非常基礎。聽說可以mount通過查看返回碼來檢查命令的狀態。

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

我不知道如何檢查。有什麼指導嗎?

mount您可以使用 shell 特殊參數檢查 的狀態程式碼和大多數編寫良好的執行檔?

來自man bash

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

執行mount命令後,立即執行echo $?將列印上一個命令的狀態程式碼。

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

並非所有執行檔都有明確定義的狀態碼。至少,它應該以成功 (0) 或失敗 (1) 程式碼退出,但情況並非總是如此。

為了擴展(和更正)您的範例腳本,if為了清晰起見,我添加了一個嵌套結構。這不是測試狀態程式碼和執行操作的唯一方法,但它是學習時最容易閱讀的方法。

#!/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

有關“退出和退出狀態”的更多資訊,您可以參考Advanced Bash-Scripting Guide

許多 Linux 發行版都有該mountpoint命令。它可以顯式用於檢查目錄是否是掛載點。就這麼簡單:

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

引用自:https://unix.stackexchange.com/questions/38870