我是脚本编写新手......我可以做非常基本的事情,但现在我需要帮助。
我有一个本地文件系统,仅在需要备份时才会安装。
我从这个开始。
#!/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!"