如何通过脚本检查文件系统是否已挂载

如何通过脚本检查文件系统是否已挂载

我是脚本编写新手......我可以做非常基本的事情,但现在我需要帮助。

我有一个本地文件系统,仅在需要备份时才会安装。

我从这个开始。

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

我不知道如何检查。有什么指导吗?

答案1

许多 Linux 发行版都有该mountpoint命令。它可以显式地用于检查目录是否是挂载点。简单如下:

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

答案2

您可以使用 shell 特殊参数 来检查 的状态代码mount以及大多数编写良好的可执行文件?

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

有关“退出和退出状态”的更多信息,您可以参考高级 Bash 脚本指南

答案3

另一种方法:

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

答案4

短的声明

查看如果安装:

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

查看如果没有安装:

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

相关内容